@drodil/backstage-plugin-qeta-react 3.52.6 → 3.53.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/components/AIAnswerCard/AIAnswerCard.esm.js +11 -11
- package/dist/components/AIAnswerCard/AIAnswerCard.esm.js.map +1 -1
- package/dist/components/AnswerForm/AnswerForm.esm.js +5 -0
- package/dist/components/AnswerForm/AnswerForm.esm.js.map +1 -1
- package/dist/components/AnswersContainer/AnswerListItem.esm.js +4 -2
- package/dist/components/AnswersContainer/AnswerListItem.esm.js.map +1 -1
- package/dist/components/AnswersContainer/AnswersContainer.esm.js +59 -231
- package/dist/components/AnswersContainer/AnswersContainer.esm.js.map +1 -1
- package/dist/components/AnswersContainer/AnswersGridItem.esm.js +167 -0
- package/dist/components/AnswersContainer/AnswersGridItem.esm.js.map +1 -0
- package/dist/components/ArticleContent/ArticleButtons.esm.js +3 -0
- package/dist/components/ArticleContent/ArticleButtons.esm.js.map +1 -1
- package/dist/components/Badges/UserBadges.esm.js +7 -2
- package/dist/components/Badges/UserBadges.esm.js.map +1 -1
- package/dist/components/Buttons/AddToCollectionButton.esm.js +7 -2
- package/dist/components/Buttons/AddToCollectionButton.esm.js.map +1 -1
- package/dist/components/Buttons/EntityFollowButton.esm.js +7 -2
- package/dist/components/Buttons/EntityFollowButton.esm.js.map +1 -1
- package/dist/components/Buttons/RankingButtons.esm.js +94 -0
- package/dist/components/Buttons/RankingButtons.esm.js.map +1 -0
- package/dist/components/Buttons/TagFollowButton.esm.js +8 -3
- package/dist/components/Buttons/TagFollowButton.esm.js.map +1 -1
- package/dist/components/Buttons/UserFollowButton.esm.js +7 -2
- package/dist/components/Buttons/UserFollowButton.esm.js.map +1 -1
- package/dist/components/CollectionsContainer/CollectionListItem.esm.js +143 -0
- package/dist/components/CollectionsContainer/CollectionListItem.esm.js.map +1 -0
- package/dist/components/CollectionsContainer/CollectionsContainer.esm.js +45 -0
- package/dist/components/CollectionsContainer/CollectionsContainer.esm.js.map +1 -0
- package/dist/components/CollectionsContainer/CollectionsGridItem.esm.js.map +1 -0
- package/dist/components/ContentHeader/ContentHeader.esm.js +6 -0
- package/dist/components/ContentHeader/ContentHeader.esm.js.map +1 -1
- package/dist/components/EntitiesContainer/EntitiesContainer.esm.js +44 -0
- package/dist/components/EntitiesContainer/EntitiesContainer.esm.js.map +1 -0
- package/dist/components/{EntitiesGrid → EntitiesContainer}/EntitiesGridItem.esm.js +18 -26
- package/dist/components/EntitiesContainer/EntitiesGridItem.esm.js.map +1 -0
- package/dist/components/EntitiesContainer/EntityListItem.esm.js +102 -0
- package/dist/components/EntitiesContainer/EntityListItem.esm.js.map +1 -0
- package/dist/components/FilterPanel/FilterPanel.esm.js +2 -2
- package/dist/components/FilterPanel/FilterPanel.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedEntitiesList.esm.js +7 -3
- package/dist/components/FollowedLists/FollowedEntitiesList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedTagsList.esm.js +8 -4
- package/dist/components/FollowedLists/FollowedTagsList.esm.js.map +1 -1
- package/dist/components/FollowedLists/FollowedUsersList.esm.js +7 -3
- package/dist/components/FollowedLists/FollowedUsersList.esm.js.map +1 -1
- package/dist/components/HomePageCards/ImpactCard.esm.js +7 -2
- package/dist/components/HomePageCards/ImpactCard.esm.js.map +1 -1
- package/dist/components/HomePageCards/PostsCard.esm.js +23 -15
- package/dist/components/HomePageCards/PostsCard.esm.js.map +1 -1
- package/dist/components/LeftMenu/LeftMenu.esm.js +15 -16
- package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -1
- package/dist/components/LinkCard/LinkCard.esm.js +4 -0
- package/dist/components/LinkCard/LinkCard.esm.js.map +1 -1
- package/dist/components/Links/Links.esm.js +7 -0
- package/dist/components/Links/Links.esm.js.map +1 -1
- package/dist/components/PostForm/EntitiesInput.esm.js +229 -226
- package/dist/components/PostForm/EntitiesInput.esm.js.map +1 -1
- package/dist/components/PostForm/PostForm.esm.js +13 -10
- package/dist/components/PostForm/PostForm.esm.js.map +1 -1
- package/dist/components/PostForm/TagInput.esm.js +4 -3
- package/dist/components/PostForm/TagInput.esm.js.map +1 -1
- package/dist/components/PostHighlightList/PostHighlightList.esm.js +6 -2
- package/dist/components/PostHighlightList/PostHighlightList.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostListItem.esm.js +57 -18
- package/dist/components/PostsContainer/PostListItem.esm.js.map +1 -1
- package/dist/components/PostsContainer/PostsContainer.esm.js +137 -128
- package/dist/components/PostsContainer/PostsContainer.esm.js.map +1 -1
- package/dist/components/{PostsGrid → PostsContainer}/PostsGridItem.esm.js +29 -53
- package/dist/components/PostsContainer/PostsGridItem.esm.js.map +1 -0
- package/dist/components/PostsTable/PostsTable.esm.js +7 -2
- package/dist/components/PostsTable/PostsTable.esm.js.map +1 -1
- package/dist/components/QetaEntityContainer/QetaEntityContainer.esm.js +178 -0
- package/dist/components/QetaEntityContainer/QetaEntityContainer.esm.js.map +1 -0
- package/dist/components/QuestionCard/QuestionCard.esm.js +4 -0
- package/dist/components/QuestionCard/QuestionCard.esm.js.map +1 -1
- package/dist/components/SuggestionsCard/SuggestionsCard.esm.js +7 -3
- package/dist/components/SuggestionsCard/SuggestionsCard.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/EntityChip.esm.js +6 -2
- package/dist/components/TagsAndEntities/EntityChip.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/TagChip.esm.js +6 -2
- package/dist/components/TagsAndEntities/TagChip.esm.js.map +1 -1
- package/dist/components/TagsAndEntities/UserChip.esm.js +7 -3
- package/dist/components/TagsAndEntities/UserChip.esm.js.map +1 -1
- package/dist/components/TagsContainer/CreateTagModal.esm.js.map +1 -0
- package/dist/components/TagsContainer/EditTagModal.esm.js.map +1 -0
- package/dist/components/{TagsGrid → TagsContainer}/TagGridItem.esm.js +3 -3
- package/dist/components/TagsContainer/TagGridItem.esm.js.map +1 -0
- package/dist/components/TagsContainer/TagListItem.esm.js +243 -0
- package/dist/components/TagsContainer/TagListItem.esm.js.map +1 -0
- package/dist/components/TagsContainer/TagsContainer.esm.js +86 -0
- package/dist/components/TagsContainer/TagsContainer.esm.js.map +1 -0
- package/dist/components/TemplateList/TemplateForm.esm.js +7 -2
- package/dist/components/TemplateList/TemplateForm.esm.js.map +1 -1
- package/dist/components/TemplateList/TemplateList.esm.js +7 -3
- package/dist/components/TemplateList/TemplateList.esm.js.map +1 -1
- package/dist/components/Timeline/TimelineItem.esm.js +4 -0
- package/dist/components/Timeline/TimelineItem.esm.js.map +1 -1
- package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js +7 -2
- package/dist/components/TopRankingUsersCard/TopRankingUsersCard.esm.js.map +1 -1
- package/dist/components/UsersContainer/UserListItem.esm.js +133 -0
- package/dist/components/UsersContainer/UserListItem.esm.js.map +1 -0
- package/dist/components/UsersContainer/UsersContainer.esm.js +44 -0
- package/dist/components/UsersContainer/UsersContainer.esm.js.map +1 -0
- package/dist/components/{UsersGrid → UsersContainer}/UsersGridItem.esm.js +35 -38
- package/dist/components/UsersContainer/UsersGridItem.esm.js.map +1 -0
- package/dist/components/Utility/QetaGridHeader.esm.js +15 -11
- package/dist/components/Utility/QetaGridHeader.esm.js.map +1 -1
- package/dist/components/Utility/QetaPagination.esm.js +69 -0
- package/dist/components/Utility/QetaPagination.esm.js.map +1 -0
- package/dist/hooks/useListItemStyles.esm.js +22 -0
- package/dist/hooks/useListItemStyles.esm.js.map +1 -0
- package/dist/hooks/{usePaginatedPosts.esm.js → useQetaEntities.esm.js} +59 -86
- package/dist/hooks/useQetaEntities.esm.js.map +1 -0
- package/dist/hooks/useUserSettings.esm.js +83 -0
- package/dist/hooks/useUserSettings.esm.js.map +1 -0
- package/dist/index.d.ts +209 -58
- package/dist/index.esm.js +21 -8
- package/dist/index.esm.js.map +1 -1
- package/dist/routes.esm.js +6 -1
- package/dist/routes.esm.js.map +1 -1
- package/dist/translation.esm.js +49 -0
- package/dist/translation.esm.js.map +1 -1
- package/package.json +2 -2
- package/dist/components/AnswersContainer/AnswerList.esm.js +0 -54
- package/dist/components/AnswersContainer/AnswerList.esm.js.map +0 -1
- package/dist/components/CollectionsGrid/CollectionsGrid.esm.js +0 -204
- package/dist/components/CollectionsGrid/CollectionsGrid.esm.js.map +0 -1
- package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js +0 -55
- package/dist/components/CollectionsGrid/CollectionsGridContent.esm.js.map +0 -1
- package/dist/components/CollectionsGrid/CollectionsGridItem.esm.js.map +0 -1
- package/dist/components/CollectionsGrid/NoCollectionsCard.esm.js +0 -21
- package/dist/components/CollectionsGrid/NoCollectionsCard.esm.js.map +0 -1
- package/dist/components/EntitiesGrid/EntitiesGrid.esm.js +0 -136
- package/dist/components/EntitiesGrid/EntitiesGrid.esm.js.map +0 -1
- package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js +0 -46
- package/dist/components/EntitiesGrid/EntitiesGridContent.esm.js.map +0 -1
- package/dist/components/EntitiesGrid/EntitiesGridItem.esm.js.map +0 -1
- package/dist/components/EntitiesGrid/NoEntitiesCard.esm.js +0 -21
- package/dist/components/EntitiesGrid/NoEntitiesCard.esm.js.map +0 -1
- package/dist/components/PostsContainer/PostList.esm.js +0 -83
- package/dist/components/PostsContainer/PostList.esm.js.map +0 -1
- package/dist/components/PostsGrid/PostsGrid.esm.js +0 -197
- package/dist/components/PostsGrid/PostsGrid.esm.js.map +0 -1
- package/dist/components/PostsGrid/PostsGridContent.esm.js +0 -90
- package/dist/components/PostsGrid/PostsGridContent.esm.js.map +0 -1
- package/dist/components/PostsGrid/PostsGridItem.esm.js.map +0 -1
- package/dist/components/TagsGrid/CreateTagModal.esm.js.map +0 -1
- package/dist/components/TagsGrid/EditTagModal.esm.js.map +0 -1
- package/dist/components/TagsGrid/NoTagsCard.esm.js +0 -21
- package/dist/components/TagsGrid/NoTagsCard.esm.js.map +0 -1
- package/dist/components/TagsGrid/TagGridItem.esm.js.map +0 -1
- package/dist/components/TagsGrid/TagsGrid.esm.js +0 -190
- package/dist/components/TagsGrid/TagsGrid.esm.js.map +0 -1
- package/dist/components/TagsGrid/TagsGridContent.esm.js +0 -62
- package/dist/components/TagsGrid/TagsGridContent.esm.js.map +0 -1
- package/dist/components/UsersGrid/NoUsersCard.esm.js +0 -21
- package/dist/components/UsersGrid/NoUsersCard.esm.js.map +0 -1
- package/dist/components/UsersGrid/UsersGrid.esm.js +0 -137
- package/dist/components/UsersGrid/UsersGrid.esm.js.map +0 -1
- package/dist/components/UsersGrid/UsersGridContent.esm.js +0 -46
- package/dist/components/UsersGrid/UsersGridContent.esm.js.map +0 -1
- package/dist/components/UsersGrid/UsersGridItem.esm.js.map +0 -1
- package/dist/hooks/usePaginatedPosts.esm.js.map +0 -1
- /package/dist/components/{CollectionsGrid → CollectionsContainer}/CollectionsGridItem.esm.js +0 -0
- /package/dist/components/{TagsGrid → TagsContainer}/CreateTagModal.esm.js +0 -0
- /package/dist/components/{TagsGrid → TagsContainer}/EditTagModal.esm.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useQetaEntities.esm.js","sources":["../../src/hooks/useQetaEntities.ts"],"sourcesContent":["import { useAnalytics } from '@backstage/core-plugin-api';\nimport { useEffect, useState } from 'react';\nimport { useSearchParams } from 'react-router-dom';\nimport useDebounce from 'react-use/lib/useDebounce';\nimport { useQetaApi } from './useQetaApi';\nimport { QetaApi } from '@drodil/backstage-plugin-qeta-common';\nimport { filterKeys as globalFilterKeys } from '../components/FilterPanel/FilterPanel';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport { useUserSettings } from './useUserSettings';\n\nexport type QetaEntitiesProps<T, F> = {\n fetch: (\n api: QetaApi,\n limit: number,\n offset: number,\n filters: F,\n ) => Promise<{ items: T[]; total: number }>;\n initialFilters: F;\n prefix: string;\n defaultPageSize?: number;\n filterKeys?: string[];\n fetchDeps?: any[];\n getKey?: (item: T) => string | number;\n usePagination?: boolean;\n};\n\nexport type FilterChange<F> = {\n key: keyof F;\n value?: F[keyof F] | string | string[];\n};\n\nexport function useQetaEntities<T, F>(props: QetaEntitiesProps<T, F>) {\n const {\n fetch,\n initialFilters,\n prefix,\n defaultPageSize,\n filterKeys,\n fetchDeps,\n getKey,\n usePagination,\n } = props;\n const analytics = useAnalytics();\n const [page, setPage] = useState(1);\n const [pageSize, setPageSize] = useState(defaultPageSize ?? 24);\n const { getSetting, setSetting } = useUserSettings();\n const [showFilterPanel, setShowFilterPanel] = useState(\n getSetting('filterPanelExpanded')[prefix] ?? false,\n );\n const [searchParams, setSearchParams] = useSearchParams();\n const [searchQuery, setSearchQuery] = useState('');\n const [filters, setFilters] = useState<F>(initialFilters);\n\n const [items, setItems] = useState<T[]>([]);\n const [hasMore, setHasMore] = useState(true);\n const [total, setTotal] = useState(0);\n\n useEffect(() => {\n if (defaultPageSize) {\n setPageSize(defaultPageSize);\n }\n }, [defaultPageSize]);\n\n useEffect(() => {\n const currentExpanded = getSetting('filterPanelExpanded');\n setSetting('filterPanelExpanded', {\n ...currentExpanded,\n [prefix]: showFilterPanel,\n });\n }, [showFilterPanel, prefix, getSetting, setSetting]);\n\n const onPageChange = (value: number) => {\n setPage(value);\n setSearchParams(prev => {\n const newValue = prev;\n newValue.set('page', String(value));\n return newValue;\n });\n };\n\n const loadNextPage = () => {\n setPage(prev => prev + 1);\n };\n\n const onFilterChange = (changes: FilterChange<F> | FilterChange<F>[]) => {\n const changesArray = Array.isArray(changes) ? changes : [changes];\n setPage(1);\n setFilters(prev => {\n const newValue = { ...prev };\n for (const { key, value } of changesArray) {\n (newValue as any)[key] = value;\n }\n return newValue;\n });\n setSearchParams(prev => {\n const newValue = prev;\n for (const { key, value } of changesArray) {\n const allowedKeys = filterKeys ?? globalFilterKeys;\n if (!allowedKeys.includes(key as any)) {\n continue;\n }\n if (!value || value === 'false') {\n newValue.delete(key as string);\n } else if (Array.isArray(value)) {\n if (value.length === 0) {\n newValue.delete(key as string);\n } else {\n newValue.set(key as string, value.join(','));\n }\n } else if (typeof value === 'number') {\n newValue.set(key as string, String(value));\n } else if ((value as any).length > 0) {\n newValue.set(key as string, value as any);\n } else {\n newValue.delete(key as string);\n }\n }\n return newValue;\n });\n };\n\n const onSearchQueryChange = (query: string) => {\n onPageChange(1);\n if (query) {\n analytics.captureEvent(`qeta_search_${prefix}`, query);\n }\n setSearchQuery(query);\n };\n\n useDebounce(\n () => {\n if ((filters as any).searchQuery !== searchQuery) {\n setFilters({ ...filters, searchQuery: searchQuery });\n }\n },\n 400,\n [searchQuery],\n );\n\n useEffect(() => {\n let filtersApplied = false;\n searchParams.forEach((value, key) => {\n try {\n if (key === 'page') {\n const pv = Number.parseInt(value, 10);\n if (pv > 0) {\n setPage(pv);\n } else {\n setPage(1);\n setItems([]);\n }\n } else if (key === `${prefix}PerPage`) {\n const qpp = Number.parseInt(value, 10);\n if (qpp > 0) setPageSize(qpp);\n } else if ((filterKeys ?? globalFilterKeys).includes(key as any)) {\n filtersApplied = true;\n if (key === 'tags') {\n (filters as any).tags = filterTags(value.split(',')) ?? [];\n } else if (key === 'entities') {\n (filters as any).entities = value.split(',');\n } else {\n (filters as any)[key] = value;\n }\n }\n } catch (_e) {\n // NOOP\n }\n });\n setFilters(filters);\n if (filtersApplied) {\n setShowFilterPanel(true);\n }\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [searchParams, filterKeys, prefix]);\n\n const {\n value: response,\n loading,\n error,\n retry,\n } = useQetaApi(\n api => {\n return fetch(api, pageSize, (page - 1) * pageSize, filters);\n },\n [page, filters, pageSize, ...(fetchDeps ?? [])],\n );\n\n useEffect(() => {\n if (response) {\n if (page === 1 || usePagination) {\n setItems(response.items);\n } else {\n setItems(prev => {\n const newItems = response.items.filter(\n newItem =>\n !prev.some(prevItem => {\n if (getKey) {\n return getKey(prevItem) === getKey(newItem);\n }\n return (prevItem as any).id === (newItem as any).id;\n }),\n );\n return [...prev, ...newItems];\n });\n }\n setHasMore((response.items ?? []).length >= pageSize);\n setTotal(response.total);\n }\n }, [response, page, pageSize, getKey, usePagination]);\n\n const onPageSizeChange = (value: number) => {\n if (response) {\n let newPage = page;\n while (newPage * value > response.total) {\n newPage -= 1;\n }\n onPageChange(Math.max(1, newPage));\n }\n setPageSize(value);\n setSearchParams(prev => {\n const newValue = prev;\n newValue.set(`${prefix}PerPage`, String(value));\n return newValue;\n });\n };\n\n return {\n page,\n setPage,\n pageSize,\n setPageSize,\n showFilterPanel,\n setShowFilterPanel,\n searchParams,\n setSearchParams,\n searchQuery,\n setSearchQuery,\n filters,\n setFilters,\n onPageChange,\n onPageSizeChange,\n onFilterChange,\n onSearchQueryChange,\n response,\n items:\n (page === 1 || usePagination) && !loading && response\n ? response.items\n : items,\n hasMore,\n total,\n loading,\n error,\n loadNextPage,\n retry,\n fetchNextPage: loadNextPage,\n };\n}\n"],"names":["filterKeys","globalFilterKeys"],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
import { useApi, storageApiRef } from '@backstage/core-plugin-api';
|
|
2
|
+
import { useState, useRef, useEffect, useCallback } from 'react';
|
|
3
|
+
|
|
4
|
+
const DEFAULT_SETTINGS = {
|
|
5
|
+
autoSaveEnabled: false,
|
|
6
|
+
filterPanelExpanded: {},
|
|
7
|
+
viewType: {},
|
|
8
|
+
aiAnswerExpanded: false,
|
|
9
|
+
usePagination: false
|
|
10
|
+
};
|
|
11
|
+
const BUCKET_KEY = "qeta";
|
|
12
|
+
const STORAGE_KEY = "qeta-user-settings";
|
|
13
|
+
const useUserSettings = () => {
|
|
14
|
+
const storageApi = useApi(storageApiRef);
|
|
15
|
+
const [settings, setSettings] = useState(DEFAULT_SETTINGS);
|
|
16
|
+
const [isLoaded, setIsLoaded] = useState(false);
|
|
17
|
+
const settingsRef = useRef(DEFAULT_SETTINGS);
|
|
18
|
+
useEffect(() => {
|
|
19
|
+
settingsRef.current = settings;
|
|
20
|
+
}, [settings]);
|
|
21
|
+
useEffect(() => {
|
|
22
|
+
const bucket = storageApi.forBucket(BUCKET_KEY);
|
|
23
|
+
const snapshot = bucket.snapshot(STORAGE_KEY);
|
|
24
|
+
const stored = snapshot.value;
|
|
25
|
+
if (stored) {
|
|
26
|
+
setSettings(stored);
|
|
27
|
+
}
|
|
28
|
+
setIsLoaded(true);
|
|
29
|
+
const subscription = bucket.observe$(STORAGE_KEY).subscribe({
|
|
30
|
+
next: (newSnapshot) => {
|
|
31
|
+
const value = newSnapshot.value;
|
|
32
|
+
if (value) {
|
|
33
|
+
setSettings(value);
|
|
34
|
+
} else {
|
|
35
|
+
setSettings(DEFAULT_SETTINGS);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
});
|
|
39
|
+
return () => {
|
|
40
|
+
subscription.unsubscribe();
|
|
41
|
+
};
|
|
42
|
+
}, [storageApi]);
|
|
43
|
+
const updateSettings = useCallback(
|
|
44
|
+
async (updates) => {
|
|
45
|
+
const bucket = storageApi.forBucket(BUCKET_KEY);
|
|
46
|
+
const snapshot = bucket.snapshot(STORAGE_KEY);
|
|
47
|
+
const currentSettings = snapshot.value || DEFAULT_SETTINGS;
|
|
48
|
+
const newSettings = {
|
|
49
|
+
...currentSettings,
|
|
50
|
+
...updates
|
|
51
|
+
};
|
|
52
|
+
await bucket.set(STORAGE_KEY, newSettings);
|
|
53
|
+
},
|
|
54
|
+
[storageApi]
|
|
55
|
+
);
|
|
56
|
+
const getSetting = useCallback(
|
|
57
|
+
(key) => {
|
|
58
|
+
return settingsRef.current[key];
|
|
59
|
+
},
|
|
60
|
+
[]
|
|
61
|
+
);
|
|
62
|
+
const setSetting = useCallback(
|
|
63
|
+
async (key, value) => {
|
|
64
|
+
await updateSettings({ [key]: value });
|
|
65
|
+
},
|
|
66
|
+
[updateSettings]
|
|
67
|
+
);
|
|
68
|
+
const resetSettings = useCallback(async () => {
|
|
69
|
+
const bucket = storageApi.forBucket("qeta");
|
|
70
|
+
await bucket.set(STORAGE_KEY, DEFAULT_SETTINGS);
|
|
71
|
+
}, [storageApi]);
|
|
72
|
+
return {
|
|
73
|
+
settings,
|
|
74
|
+
updateSettings,
|
|
75
|
+
getSetting,
|
|
76
|
+
setSetting,
|
|
77
|
+
resetSettings,
|
|
78
|
+
isLoaded
|
|
79
|
+
};
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
export { useUserSettings };
|
|
83
|
+
//# sourceMappingURL=useUserSettings.esm.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"useUserSettings.esm.js","sources":["../../src/hooks/useUserSettings.ts"],"sourcesContent":["import { useApi } from '@backstage/core-plugin-api';\nimport { storageApiRef } from '@backstage/core-plugin-api';\nimport { useCallback, useEffect, useRef, useState } from 'react';\nimport { ViewType } from '../components/ViewToggle/ViewToggle';\n\nexport type UserSettings = {\n autoSaveEnabled: boolean;\n filterPanelExpanded: Record<string, boolean>;\n viewType: Record<string, ViewType>;\n aiAnswerExpanded: boolean;\n usePagination: boolean;\n};\n\nconst DEFAULT_SETTINGS: UserSettings = {\n autoSaveEnabled: false,\n filterPanelExpanded: {},\n viewType: {},\n aiAnswerExpanded: false,\n usePagination: false,\n};\n\nconst BUCKET_KEY = 'qeta';\nconst STORAGE_KEY = 'qeta-user-settings';\n\nexport const useUserSettings = () => {\n const storageApi = useApi(storageApiRef);\n const [settings, setSettings] = useState<UserSettings>(DEFAULT_SETTINGS);\n const [isLoaded, setIsLoaded] = useState(false);\n const settingsRef = useRef<UserSettings>(DEFAULT_SETTINGS);\n\n useEffect(() => {\n settingsRef.current = settings;\n }, [settings]);\n\n useEffect(() => {\n const bucket = storageApi.forBucket(BUCKET_KEY);\n const snapshot = bucket.snapshot(STORAGE_KEY);\n const stored = snapshot.value as UserSettings | undefined;\n\n if (stored) {\n setSettings(stored);\n }\n\n setIsLoaded(true);\n\n const subscription = bucket.observe$<UserSettings>(STORAGE_KEY).subscribe({\n next: newSnapshot => {\n const value = newSnapshot.value as UserSettings | undefined;\n if (value) {\n setSettings(value);\n } else {\n setSettings(DEFAULT_SETTINGS);\n }\n },\n });\n\n return () => {\n subscription.unsubscribe();\n };\n }, [storageApi]);\n\n const updateSettings = useCallback(\n async (updates: Partial<UserSettings>) => {\n const bucket = storageApi.forBucket(BUCKET_KEY);\n const snapshot = bucket.snapshot(STORAGE_KEY);\n const currentSettings =\n (snapshot.value as UserSettings) || DEFAULT_SETTINGS;\n const newSettings = {\n ...currentSettings,\n ...(updates as Partial<UserSettings>),\n };\n await bucket.set(STORAGE_KEY, newSettings);\n },\n [storageApi],\n );\n\n const getSetting = useCallback(\n <K extends keyof UserSettings>(key: K): UserSettings[K] => {\n return settingsRef.current[key];\n },\n [],\n );\n\n const setSetting = useCallback(\n async <K extends keyof UserSettings>(\n key: K,\n value: UserSettings[K],\n ): Promise<void> => {\n await updateSettings({ [key]: value } as Partial<UserSettings>);\n },\n [updateSettings],\n );\n\n const resetSettings = useCallback(async () => {\n const bucket = storageApi.forBucket('qeta');\n await bucket.set(STORAGE_KEY, DEFAULT_SETTINGS);\n }, [storageApi]);\n\n return {\n settings,\n updateSettings,\n getSetting,\n setSetting,\n resetSettings,\n isLoaded,\n };\n};\n"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@ import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
|
|
|
2
2
|
import { IdentityApi } from '@backstage/core-plugin-api';
|
|
3
3
|
import * as _backstage_frontend_plugin_api from '@backstage/frontend-plugin-api';
|
|
4
4
|
import * as _drodil_backstage_plugin_qeta_common from '@drodil/backstage-plugin-qeta-common';
|
|
5
|
-
import { QetaApi, TimelineItem, PostType, PostStatus, PostResponse, Template,
|
|
5
|
+
import { QetaApi, TimelineItem, PostType, PostStatus, PostResponse, Template, AnswerResponse, Collection, Post, PostsQuery, CollectionResponse, TagResponse, Answer, Comment, Stat, Badge, EntityResponse, UserResponse, TemplatesResponse, Article, AIQuery } from '@drodil/backstage-plugin-qeta-common';
|
|
6
6
|
import * as react_jsx_runtime from 'react/jsx-runtime';
|
|
7
7
|
import { Entity, UserEntity } from '@backstage/catalog-model';
|
|
8
8
|
import * as react from 'react';
|
|
@@ -10,7 +10,9 @@ import { CSSProperties, ReactNode, KeyboardEvent, MouseEvent, Dispatch, SetState
|
|
|
10
10
|
import { LinkProps } from '@backstage/core-components';
|
|
11
11
|
import { SvgIconProps } from '@material-ui/core';
|
|
12
12
|
import { PluggableList } from 'unified';
|
|
13
|
+
import * as _material_ui_styles from '@material-ui/styles';
|
|
13
14
|
import * as react_use_lib_useAsyncFn from 'react-use/lib/useAsyncFn';
|
|
15
|
+
import * as react_router_dom from 'react-router-dom';
|
|
14
16
|
import { Overrides } from '@material-ui/core/styles/overrides';
|
|
15
17
|
import { StyleRules } from '@material-ui/core/styles/withStyles';
|
|
16
18
|
|
|
@@ -41,6 +43,7 @@ declare const entitiesRouteRef: _backstage_core_plugin_api.SubRouteRef<undefined
|
|
|
41
43
|
declare const entityRouteRef: _backstage_core_plugin_api.SubRouteRef<_backstage_core_plugin_api.PathParams<"/entities/:entityRef">>;
|
|
42
44
|
declare const moderatorRouteRef: _backstage_core_plugin_api.SubRouteRef<undefined>;
|
|
43
45
|
declare const reviewRouteRef: _backstage_core_plugin_api.SubRouteRef<undefined>;
|
|
46
|
+
declare const settingsRouteRef: _backstage_core_plugin_api.SubRouteRef<undefined>;
|
|
44
47
|
|
|
45
48
|
declare const qetaApiRef: _backstage_frontend_plugin_api.ApiRef<QetaApi>;
|
|
46
49
|
|
|
@@ -102,19 +105,6 @@ type Filters = {
|
|
|
102
105
|
dateRange?: string;
|
|
103
106
|
status?: PostStatus;
|
|
104
107
|
};
|
|
105
|
-
type PostFilters = Filters & {
|
|
106
|
-
orderBy?: 'rank' | 'created' | 'title' | 'views' | 'score' | 'trend' | 'answersCount' | 'updated';
|
|
107
|
-
noAnswers?: 'true' | 'false';
|
|
108
|
-
noCorrectAnswer?: 'true' | 'false';
|
|
109
|
-
noVotes?: 'true' | 'false';
|
|
110
|
-
collectionId?: number;
|
|
111
|
-
type?: PostType;
|
|
112
|
-
entities?: string[];
|
|
113
|
-
tags?: string[];
|
|
114
|
-
tagsRelation?: 'and' | 'or';
|
|
115
|
-
entitiesRelation?: 'and' | 'or';
|
|
116
|
-
status?: PostStatus;
|
|
117
|
-
};
|
|
118
108
|
type Change<T extends Filters> = {
|
|
119
109
|
key: keyof T;
|
|
120
110
|
value?: string | string[];
|
|
@@ -139,7 +129,9 @@ interface ViewToggleProps {
|
|
|
139
129
|
}
|
|
140
130
|
declare const ViewToggle: ({ view, onChange }: ViewToggleProps) => react_jsx_runtime.JSX.Element;
|
|
141
131
|
|
|
142
|
-
type
|
|
132
|
+
type PostsContainerProps = {
|
|
133
|
+
type?: PostType;
|
|
134
|
+
tags?: string[];
|
|
143
135
|
author?: string;
|
|
144
136
|
showFilters?: boolean;
|
|
145
137
|
showTitle?: boolean;
|
|
@@ -149,52 +141,41 @@ type PaginatedPostsProps = PostFilters & {
|
|
|
149
141
|
showWriteButton?: boolean;
|
|
150
142
|
showLinkButton?: boolean;
|
|
151
143
|
showNoQuestionsBtn?: boolean;
|
|
152
|
-
initialPageSize?: number;
|
|
153
144
|
collectionId?: number;
|
|
154
|
-
|
|
155
|
-
};
|
|
156
|
-
|
|
157
|
-
type PostsContainerProps = PaginatedPostsProps & {
|
|
145
|
+
initialPageSize?: number;
|
|
158
146
|
entity?: string;
|
|
159
147
|
filterPanelProps?: CommonFilterPanelProps;
|
|
160
148
|
showTypeLabel?: boolean;
|
|
149
|
+
allowRanking?: boolean;
|
|
150
|
+
defaultView?: ViewType;
|
|
161
151
|
view?: ViewType;
|
|
162
152
|
onViewChange?: (view: ViewType) => void;
|
|
153
|
+
status?: string;
|
|
154
|
+
prefix?: string;
|
|
155
|
+
orderBy?: 'rank' | 'created' | 'title' | 'views' | 'score' | 'trend' | 'answersCount' | 'updated';
|
|
163
156
|
};
|
|
164
157
|
declare const PostsContainer: (props: PostsContainerProps) => react_jsx_runtime.JSX.Element;
|
|
165
158
|
|
|
166
|
-
declare const PostList: (props: {
|
|
167
|
-
loading: boolean;
|
|
168
|
-
error: any;
|
|
169
|
-
response?: PostsResponse;
|
|
170
|
-
entity?: string;
|
|
171
|
-
tags?: string[];
|
|
172
|
-
showNoQuestionsBtn?: boolean;
|
|
173
|
-
entityPage?: boolean;
|
|
174
|
-
type?: PostType;
|
|
175
|
-
showTypeLabel?: boolean;
|
|
176
|
-
hasMore?: boolean;
|
|
177
|
-
loadNextPage?: () => void;
|
|
178
|
-
}) => react_jsx_runtime.JSX.Element;
|
|
179
|
-
|
|
180
159
|
interface PostListItemProps {
|
|
181
160
|
post: PostResponse;
|
|
182
161
|
entity?: string;
|
|
183
162
|
type?: PostType;
|
|
184
163
|
showTypeLabel?: boolean;
|
|
164
|
+
allowRanking?: boolean;
|
|
165
|
+
onRankUpdate?: () => void;
|
|
166
|
+
collectionId?: number;
|
|
185
167
|
}
|
|
186
168
|
declare const PostListItem: (props: PostListItemProps) => react_jsx_runtime.JSX.Element;
|
|
187
169
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
error: any;
|
|
191
|
-
response?: AnswersResponse;
|
|
170
|
+
interface PostsGridItemProps {
|
|
171
|
+
post: PostResponse;
|
|
192
172
|
entity?: string;
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
}
|
|
173
|
+
type?: PostType;
|
|
174
|
+
allowRanking?: boolean;
|
|
175
|
+
onRankUpdate?: () => void;
|
|
176
|
+
collectionId?: number;
|
|
177
|
+
}
|
|
178
|
+
declare const PostsGridItem: (props: PostsGridItemProps) => react_jsx_runtime.JSX.Element;
|
|
198
179
|
|
|
199
180
|
interface AnswersContainerProps {
|
|
200
181
|
tags?: string[];
|
|
@@ -203,6 +184,7 @@ interface AnswersContainerProps {
|
|
|
203
184
|
showFilters?: boolean;
|
|
204
185
|
showTitle?: boolean;
|
|
205
186
|
title?: string;
|
|
187
|
+
prefix?: string;
|
|
206
188
|
}
|
|
207
189
|
declare const AnswersContainer: (props: AnswersContainerProps) => react_jsx_runtime.JSX.Element;
|
|
208
190
|
|
|
@@ -212,6 +194,12 @@ interface AnswerListItemProps {
|
|
|
212
194
|
}
|
|
213
195
|
declare const AnswerListItem: (props: AnswerListItemProps) => react_jsx_runtime.JSX.Element;
|
|
214
196
|
|
|
197
|
+
interface AnswersGridItemProps {
|
|
198
|
+
answer: AnswerResponse;
|
|
199
|
+
entity?: string;
|
|
200
|
+
}
|
|
201
|
+
declare const AnswersGridItem: (props: AnswersGridItemProps) => react_jsx_runtime.JSX.Element;
|
|
202
|
+
|
|
215
203
|
declare const AskQuestionButton: (props: {
|
|
216
204
|
entity?: string;
|
|
217
205
|
tags?: string[];
|
|
@@ -274,6 +262,13 @@ interface ContentHeaderButtonProps {
|
|
|
274
262
|
}
|
|
275
263
|
declare const ContentHeaderButton: (props: ContentHeaderButtonProps) => react_jsx_runtime.JSX.Element;
|
|
276
264
|
|
|
265
|
+
interface RankingButtonsProps {
|
|
266
|
+
postId: number;
|
|
267
|
+
collectionId: number | undefined;
|
|
268
|
+
onRankUpdate?: () => void;
|
|
269
|
+
}
|
|
270
|
+
declare const RankingButtons: (props: RankingButtonsProps) => react_jsx_runtime.JSX.Element | null;
|
|
271
|
+
|
|
277
272
|
declare const PostHighlightListContent: (props: {
|
|
278
273
|
loading?: boolean;
|
|
279
274
|
error?: any;
|
|
@@ -421,19 +416,61 @@ declare const TopRankingUsers: (props: {
|
|
|
421
416
|
|
|
422
417
|
declare const TrophyIcon: (props: SvgIconProps) => react_jsx_runtime.JSX.Element;
|
|
423
418
|
|
|
424
|
-
declare const
|
|
419
|
+
declare const TagsContainer: (props: {
|
|
420
|
+
filterPanelProps?: CommonFilterPanelProps;
|
|
421
|
+
defaultView?: ViewType;
|
|
422
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
425
423
|
|
|
426
|
-
declare const
|
|
424
|
+
declare const TagGridItem: (props: {
|
|
425
|
+
tag: TagResponse;
|
|
426
|
+
onTagEdit: () => void;
|
|
427
|
+
isModerator?: boolean;
|
|
428
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
427
429
|
|
|
428
|
-
declare const
|
|
430
|
+
declare const TagListItem: (props: {
|
|
431
|
+
tag: TagResponse;
|
|
432
|
+
onTagEdit: () => void;
|
|
433
|
+
isModerator?: boolean;
|
|
434
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
429
435
|
|
|
430
|
-
|
|
431
|
-
|
|
436
|
+
declare const CreateTagModal: (props: {
|
|
437
|
+
open: boolean;
|
|
438
|
+
onClose: () => void;
|
|
439
|
+
isModerator?: boolean;
|
|
440
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
441
|
+
|
|
442
|
+
declare const EditTagModal: (props: {
|
|
443
|
+
tag: TagResponse;
|
|
444
|
+
open: boolean;
|
|
445
|
+
onClose: () => void;
|
|
446
|
+
isModerator?: boolean;
|
|
447
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
448
|
+
|
|
449
|
+
declare const EntitiesContainer: (props: {
|
|
432
450
|
filterPanelProps?: CommonFilterPanelProps;
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
declare const
|
|
451
|
+
defaultView?: ViewType;
|
|
452
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
453
|
+
|
|
454
|
+
declare const EntitiesGridItem: (props: {
|
|
455
|
+
entity: EntityResponse;
|
|
456
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
457
|
+
|
|
458
|
+
declare const EntityListItem: (props: {
|
|
459
|
+
entity: EntityResponse;
|
|
460
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
461
|
+
|
|
462
|
+
declare const UsersContainer: (props: {
|
|
463
|
+
filterPanelProps?: CommonFilterPanelProps;
|
|
464
|
+
defaultView?: ViewType;
|
|
465
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
466
|
+
|
|
467
|
+
declare const UsersGridItem: (props: {
|
|
468
|
+
user: UserResponse;
|
|
469
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
470
|
+
|
|
471
|
+
declare const UserListItem: (props: {
|
|
472
|
+
user: UserResponse;
|
|
473
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
437
474
|
|
|
438
475
|
type QetaArticleContentClassKey = 'content' | 'headerImage' | 'commentSection' | 'commentSectionContainer';
|
|
439
476
|
declare const ArticleContent: (props: {
|
|
@@ -447,12 +484,12 @@ type CollectionFormProps = {
|
|
|
447
484
|
};
|
|
448
485
|
declare const CollectionForm: (props: CollectionFormProps) => react_jsx_runtime.JSX.Element;
|
|
449
486
|
|
|
450
|
-
|
|
451
|
-
owner?: string;
|
|
452
|
-
showFilters?: boolean;
|
|
487
|
+
declare const CollectionsContainer: (props: {
|
|
453
488
|
filterPanelProps?: CommonFilterPanelProps;
|
|
454
|
-
|
|
455
|
-
|
|
489
|
+
defaultView?: ViewType;
|
|
490
|
+
owner?: string;
|
|
491
|
+
prefix?: string;
|
|
492
|
+
}) => react_jsx_runtime.JSX.Element;
|
|
456
493
|
|
|
457
494
|
declare const LeftMenu: (props: {
|
|
458
495
|
onKeyDown?: (event: KeyboardEvent) => void;
|
|
@@ -577,6 +614,21 @@ declare function useQetaApi<T>(f: (api: QetaApi) => Promise<T>, deps?: any[]): {
|
|
|
577
614
|
value: T;
|
|
578
615
|
};
|
|
579
616
|
|
|
617
|
+
declare function useVoting(resp: PostResponse | AnswerResponse): {
|
|
618
|
+
entity: _drodil_backstage_plugin_qeta_common.Post | _drodil_backstage_plugin_qeta_common.Answer;
|
|
619
|
+
ownVote: number;
|
|
620
|
+
correctAnswer: boolean;
|
|
621
|
+
score: number;
|
|
622
|
+
voteUp: () => void;
|
|
623
|
+
voteDown: () => void;
|
|
624
|
+
toggleCorrectAnswer: () => void;
|
|
625
|
+
voteUpTooltip: string;
|
|
626
|
+
voteDownTooltip: string;
|
|
627
|
+
correctTooltip: string;
|
|
628
|
+
};
|
|
629
|
+
|
|
630
|
+
declare const useListItemStyles: (props?: any) => _material_ui_styles.ClassNameMap<"root">;
|
|
631
|
+
|
|
580
632
|
declare const useTagsFollow: () => {
|
|
581
633
|
tags: string[];
|
|
582
634
|
followTag: (tag: string) => void;
|
|
@@ -652,6 +704,70 @@ declare const useCanReview: () => {
|
|
|
652
704
|
type GridType = 'posts' | 'tags' | 'entities' | 'users' | 'collections';
|
|
653
705
|
declare function useGridPageSize(gridType: GridType, basePageSize?: number): number;
|
|
654
706
|
|
|
707
|
+
type QetaEntitiesProps<T, F> = {
|
|
708
|
+
fetch: (api: QetaApi, limit: number, offset: number, filters: F) => Promise<{
|
|
709
|
+
items: T[];
|
|
710
|
+
total: number;
|
|
711
|
+
}>;
|
|
712
|
+
initialFilters: F;
|
|
713
|
+
prefix: string;
|
|
714
|
+
defaultPageSize?: number;
|
|
715
|
+
filterKeys?: string[];
|
|
716
|
+
fetchDeps?: any[];
|
|
717
|
+
getKey?: (item: T) => string | number;
|
|
718
|
+
usePagination?: boolean;
|
|
719
|
+
};
|
|
720
|
+
type FilterChange<F> = {
|
|
721
|
+
key: keyof F;
|
|
722
|
+
value?: F[keyof F] | string | string[];
|
|
723
|
+
};
|
|
724
|
+
declare function useQetaEntities<T, F>(props: QetaEntitiesProps<T, F>): {
|
|
725
|
+
page: number;
|
|
726
|
+
setPage: react.Dispatch<react.SetStateAction<number>>;
|
|
727
|
+
pageSize: number;
|
|
728
|
+
setPageSize: react.Dispatch<react.SetStateAction<number>>;
|
|
729
|
+
showFilterPanel: boolean;
|
|
730
|
+
setShowFilterPanel: react.Dispatch<react.SetStateAction<boolean>>;
|
|
731
|
+
searchParams: URLSearchParams;
|
|
732
|
+
setSearchParams: react_router_dom.SetURLSearchParams;
|
|
733
|
+
searchQuery: string;
|
|
734
|
+
setSearchQuery: react.Dispatch<react.SetStateAction<string>>;
|
|
735
|
+
filters: F;
|
|
736
|
+
setFilters: react.Dispatch<react.SetStateAction<F>>;
|
|
737
|
+
onPageChange: (value: number) => void;
|
|
738
|
+
onPageSizeChange: (value: number) => void;
|
|
739
|
+
onFilterChange: (changes: FilterChange<F> | FilterChange<F>[]) => void;
|
|
740
|
+
onSearchQueryChange: (query: string) => void;
|
|
741
|
+
response: {
|
|
742
|
+
items: T[];
|
|
743
|
+
total: number;
|
|
744
|
+
} | undefined;
|
|
745
|
+
items: T[];
|
|
746
|
+
hasMore: boolean;
|
|
747
|
+
total: number;
|
|
748
|
+
loading: boolean;
|
|
749
|
+
error: Error | undefined;
|
|
750
|
+
loadNextPage: () => void;
|
|
751
|
+
retry: (() => void) | (() => void) | (() => void) | (() => void);
|
|
752
|
+
fetchNextPage: () => void;
|
|
753
|
+
};
|
|
754
|
+
|
|
755
|
+
type UserSettings = {
|
|
756
|
+
autoSaveEnabled: boolean;
|
|
757
|
+
filterPanelExpanded: Record<string, boolean>;
|
|
758
|
+
viewType: Record<string, ViewType>;
|
|
759
|
+
aiAnswerExpanded: boolean;
|
|
760
|
+
usePagination: boolean;
|
|
761
|
+
};
|
|
762
|
+
declare const useUserSettings: () => {
|
|
763
|
+
settings: UserSettings;
|
|
764
|
+
updateSettings: (updates: Partial<UserSettings>) => Promise<void>;
|
|
765
|
+
getSetting: <K extends keyof UserSettings>(key: K) => UserSettings[K];
|
|
766
|
+
setSetting: <K extends keyof UserSettings>(key: K, value: UserSettings[K]) => Promise<void>;
|
|
767
|
+
resetSettings: () => Promise<void>;
|
|
768
|
+
isLoaded: boolean;
|
|
769
|
+
};
|
|
770
|
+
|
|
655
771
|
/** @alpha */
|
|
656
772
|
declare const qetaTranslationRef: _backstage_frontend_plugin_api.TranslationRef<"qeta", {
|
|
657
773
|
readonly "answer.questionTitle": "Q: {{question}}";
|
|
@@ -711,6 +827,7 @@ declare const qetaTranslationRef: _backstage_frontend_plugin_api.TranslationRef<
|
|
|
711
827
|
readonly "common.draft": "Draft";
|
|
712
828
|
readonly "common.deleted": "Deleted";
|
|
713
829
|
readonly "common.score": "{{score}} score";
|
|
830
|
+
readonly "common.error": "Error";
|
|
714
831
|
readonly "common.answers": "answers";
|
|
715
832
|
readonly "common.links": "links";
|
|
716
833
|
readonly "common.questions": "questions";
|
|
@@ -938,6 +1055,7 @@ declare const qetaTranslationRef: _backstage_frontend_plugin_api.TranslationRef<
|
|
|
938
1055
|
readonly "leftMenu.articles": "Articles";
|
|
939
1056
|
readonly "leftMenu.moderate": "Moderate";
|
|
940
1057
|
readonly "leftMenu.review": "Review";
|
|
1058
|
+
readonly "leftMenu.settings": "Settings";
|
|
941
1059
|
readonly "leftMenu.manage": "Manage";
|
|
942
1060
|
readonly "leftMenu.buttonLabel": "Menu";
|
|
943
1061
|
readonly "leftMenu.home": "Home";
|
|
@@ -951,6 +1069,35 @@ declare const qetaTranslationRef: _backstage_frontend_plugin_api.TranslationRef<
|
|
|
951
1069
|
readonly "moderatorPage.tools": "Tools";
|
|
952
1070
|
readonly "moderatorPage.templatesInfo": "Templates can be used to prefill question content for the user";
|
|
953
1071
|
readonly "moderatorPage.deletedPosts": "Deleted posts";
|
|
1072
|
+
readonly "settingsPage.title": "User Settings";
|
|
1073
|
+
readonly "settingsPage.autoSave.description": "Automatically save your drafts while writing questions and articles";
|
|
1074
|
+
readonly "settingsPage.autoSave.label": "Enable Auto-save";
|
|
1075
|
+
readonly "settingsPage.editorPreferences": "Editor Preferences";
|
|
1076
|
+
readonly "settingsPage.displayPreferences": "Display Preferences";
|
|
1077
|
+
readonly "settingsPage.aiAnswerExpanded.description": "Show AI-generated answers in expanded state when viewing questions";
|
|
1078
|
+
readonly "settingsPage.aiAnswerExpanded.label": "Expand AI Answers by Default";
|
|
1079
|
+
readonly "settingsPage.usePagination.description": "Use traditional pagination instead of infinite scrolling to load more items";
|
|
1080
|
+
readonly "settingsPage.usePagination.label": "Use Pagination";
|
|
1081
|
+
readonly "settingsPage.viewTypePreferences.title": "View Type Preferences";
|
|
1082
|
+
readonly "settingsPage.viewTypePreferences.default": "Default";
|
|
1083
|
+
readonly "settingsPage.viewTypePreferences.description": "Choose how you want to view different types of content. Select \"Default\" to use the system default view.";
|
|
1084
|
+
readonly "settingsPage.viewTypePreferences.labels.tags": "Tags";
|
|
1085
|
+
readonly "settingsPage.viewTypePreferences.labels.entities": "Entities";
|
|
1086
|
+
readonly "settingsPage.viewTypePreferences.labels.users": "Users";
|
|
1087
|
+
readonly "settingsPage.viewTypePreferences.labels.collections": "Collections";
|
|
1088
|
+
readonly "settingsPage.viewTypePreferences.labels.links": "Links";
|
|
1089
|
+
readonly "settingsPage.viewTypePreferences.labels.questions": "Questions";
|
|
1090
|
+
readonly "settingsPage.viewTypePreferences.labels.favorites": "Favorites";
|
|
1091
|
+
readonly "settingsPage.viewTypePreferences.labels.articles": "Articles";
|
|
1092
|
+
readonly "settingsPage.viewTypePreferences.labels.tagPosts": "Tag page posts";
|
|
1093
|
+
readonly "settingsPage.viewTypePreferences.labels.collectionPosts": "Collection page posts";
|
|
1094
|
+
readonly "settingsPage.viewTypePreferences.labels.userQuestions": "User page questions";
|
|
1095
|
+
readonly "settingsPage.viewTypePreferences.labels.userArticles": "User page articles";
|
|
1096
|
+
readonly "settingsPage.viewTypePreferences.labels.userLinks": "User page links";
|
|
1097
|
+
readonly "settingsPage.viewTypePreferences.labels.userCollections": "User page collections";
|
|
1098
|
+
readonly "settingsPage.viewTypePreferences.labels.userAnswers": "User page answers";
|
|
1099
|
+
readonly "settingsPage.viewTypePreferences.grid": "Grid";
|
|
1100
|
+
readonly "settingsPage.viewTypePreferences.list": "List";
|
|
954
1101
|
readonly "suggestionsCard.title": "Suggestions";
|
|
955
1102
|
readonly "suggestionsCard.noSuggestions": "No suggestions";
|
|
956
1103
|
readonly "suggestionsCard.noCorrectAnswer1": "Your question \"{{title}}\" does not have a correct answer";
|
|
@@ -1115,6 +1262,7 @@ declare const qetaTranslationRef: _backstage_frontend_plugin_api.TranslationRef<
|
|
|
1115
1262
|
readonly "datePicker.range.last7days": "Last 7 days";
|
|
1116
1263
|
readonly "datePicker.range.last30days": "Last 30 days";
|
|
1117
1264
|
readonly "datePicker.range.custom": "Custom";
|
|
1265
|
+
readonly "pagination.defaultTooltip": "Items per page";
|
|
1118
1266
|
readonly "filterPanel.entitiesRelation.label": "Entities relation";
|
|
1119
1267
|
readonly "filterPanel.noAnswers.label": "No answers";
|
|
1120
1268
|
readonly "filterPanel.noVotes.label": "No votes";
|
|
@@ -1175,6 +1323,7 @@ declare const qetaTranslationRef: _backstage_frontend_plugin_api.TranslationRef<
|
|
|
1175
1323
|
readonly "postsTable.cells.updated": "Last updated";
|
|
1176
1324
|
readonly "postsTable.cells.title": "Title";
|
|
1177
1325
|
readonly "postsTable.cells.asked": "Asked";
|
|
1326
|
+
readonly "tagPage.tags": "Tags";
|
|
1178
1327
|
readonly "tagPage.search.label": "Search tag";
|
|
1179
1328
|
readonly "tagPage.search.placeholder": "Search...";
|
|
1180
1329
|
readonly "tagPage.errorLoading": "Could not load tags";
|
|
@@ -1183,6 +1332,7 @@ declare const qetaTranslationRef: _backstage_frontend_plugin_api.TranslationRef<
|
|
|
1183
1332
|
readonly "tagPage.tags_zero": "No tags";
|
|
1184
1333
|
readonly "tagPage.tags_one": "{{count}} tag";
|
|
1185
1334
|
readonly "tagPage.tags_other": "{{count}} tags";
|
|
1335
|
+
readonly "entitiesPage.entities": "Entities";
|
|
1186
1336
|
readonly "entitiesPage.search.label": "Search entity";
|
|
1187
1337
|
readonly "entitiesPage.search.placeholder": "Search...";
|
|
1188
1338
|
readonly "entitiesPage.errorLoading": "Could not load entities";
|
|
@@ -1197,6 +1347,7 @@ declare const qetaTranslationRef: _backstage_frontend_plugin_api.TranslationRef<
|
|
|
1197
1347
|
readonly "aiAnswerCard.show": "Show";
|
|
1198
1348
|
readonly "aiAnswerCard.hide": "Hide";
|
|
1199
1349
|
readonly "usersPage.title": "Users";
|
|
1350
|
+
readonly "usersPage.users": "Users";
|
|
1200
1351
|
readonly "usersPage.search.label": "Search user";
|
|
1201
1352
|
readonly "usersPage.search.placeholder": "Search...";
|
|
1202
1353
|
readonly "usersPage.errorLoading": "Could not load users";
|
|
@@ -1317,4 +1468,4 @@ type QetaOverrides = Overrides & {
|
|
|
1317
1468
|
[Name in keyof QetaComponentsNameToClassKey]?: Partial<StyleRules<QetaComponentsNameToClassKey[Name]>>;
|
|
1318
1469
|
};
|
|
1319
1470
|
|
|
1320
|
-
export { AIAnswerCard, AddToCollectionButton, AnswerCard, AnswerForm,
|
|
1471
|
+
export { AIAnswerCard, AddToCollectionButton, AnswerCard, AnswerForm, AnswerListItem, AnswersContainer, AnswersGridItem, ArticleContent, AskQuestionButton, AuthorLink, BadgeChip, ButtonContainer, CollectionFollowButton, CollectionForm, CollectionsContainer, ContentHeader, ContentHeaderButton, ContentHeaderCard, type ContentHeaderCardProps, type ContentHeaderProps, CreateCollectionButton, CreateLinkButton, CreateTagModal, DeleteModal, DeletedBanner, DraftBanner, EditTagModal, EntitiesContainer, EntitiesGridItem, EntityFollowButton, EntityListItem, FaviconItem, type FilterChange, FilterPanel, FollowedCollectionsList, FollowedEntitiesList, FollowedTagsList, FollowedUsersList, type GridType, ImpactCard, LeftMenu, LeftMenuButton, LinkCard, MarkdownRenderer, ObsoleteBanner, ObsoleteModal, OpenLinkButton, PostForm, PostHighlightList, PostHighlightListContainer, PostHighlightListContent, PostListItem, PostsCard, PostsContainer, type PostsContainerProps, PostsGridItem, PostsTable, QetaContext, type QetaContextProps, type QetaEntitiesProps, type QetaOverrides, QetaProvider, QuestionCard, type QuestionFormValues, QuestionsTable, RankingButtons, RelativeTimeWithTooltip, SelectTemplateList, StatsChart, StatusChip, SuggestionsCard, type TagAndEntitiesFormValues, TagFollowButton, TagGridItem, TagListItem, TagsContainer, type TemplateFormValues, TemplateList, Timeline, TimelineItemCard, TopRankingUsers, TrophyIcon, UpdatedByLink, UserBadges, UserFollowButton, UserLink, UserListItem, type UserSettings, UsersContainer, UsersGridItem, ValidReviewModal, ViewToggle, type ViewType, WriteArticleButton, articleRouteRef, articlesRouteRef, askRouteRef, collectionCreateRouteRef, collectionEditRouteRef, collectionRouteRef, collectionsRouteRef, createLinkRouteRef, editArticleRouteRef, editLinkRouteRef, editQuestionRouteRef, entitiesRouteRef, entityRouteRef, favoriteQuestionsRouteRef, linkRouteRef, linksRouteRef, moderatorRouteRef, qetaApiRef, qetaRouteRef, qetaTranslationRef, qetaTranslations, questionRouteRef, questionsRouteRef, reviewRouteRef, settingsRouteRef, statisticsRouteRef, tagRouteRef, tagsRouteRef, useAI, useCanReview, useCollectionsFollow, useEntityAuthor, useEntityFollow, useGridPageSize, useIdentityApi, useIsModerator, useListItemStyles, useQetaApi, useQetaContext, useQetaEntities, useTagsFollow, useUserFollow, useUserInfo, useUserSettings, useVoting, userRouteRef, usersRouteRef, writeRouteRef };
|
package/dist/index.esm.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
export { articleRouteRef, articlesRouteRef, askRouteRef, collectionCreateRouteRef, collectionEditRouteRef, collectionRouteRef, collectionsRouteRef, createLinkRouteRef, editArticleRouteRef, editLinkRouteRef, editQuestionRouteRef, entitiesRouteRef, entityRouteRef, favoriteQuestionsRouteRef, linkRouteRef, linksRouteRef, moderatorRouteRef, qetaRouteRef, questionRouteRef, questionsRouteRef, reviewRouteRef, statisticsRouteRef, tagRouteRef, tagsRouteRef, userRouteRef, usersRouteRef, writeRouteRef } from './routes.esm.js';
|
|
1
|
+
export { articleRouteRef, articlesRouteRef, askRouteRef, collectionCreateRouteRef, collectionEditRouteRef, collectionRouteRef, collectionsRouteRef, createLinkRouteRef, editArticleRouteRef, editLinkRouteRef, editQuestionRouteRef, entitiesRouteRef, entityRouteRef, favoriteQuestionsRouteRef, linkRouteRef, linksRouteRef, moderatorRouteRef, qetaRouteRef, questionRouteRef, questionsRouteRef, reviewRouteRef, settingsRouteRef, statisticsRouteRef, tagRouteRef, tagsRouteRef, userRouteRef, usersRouteRef, writeRouteRef } from './routes.esm.js';
|
|
2
2
|
export { qetaApiRef } from './api.esm.js';
|
|
3
3
|
export { Timeline } from './components/Timeline/Timeline.esm.js';
|
|
4
4
|
export { TimelineItemCard } from './components/Timeline/TimelineItem.esm.js';
|
|
5
5
|
export { PostForm } from './components/PostForm/PostForm.esm.js';
|
|
6
6
|
export { PostsContainer } from './components/PostsContainer/PostsContainer.esm.js';
|
|
7
|
-
export { PostList } from './components/PostsContainer/PostList.esm.js';
|
|
8
7
|
export { PostListItem } from './components/PostsContainer/PostListItem.esm.js';
|
|
8
|
+
export { PostsGridItem } from './components/PostsContainer/PostsGridItem.esm.js';
|
|
9
9
|
export { FilterPanel } from './components/FilterPanel/FilterPanel.esm.js';
|
|
10
|
-
export { AnswerList } from './components/AnswersContainer/AnswerList.esm.js';
|
|
11
10
|
export { AnswersContainer } from './components/AnswersContainer/AnswersContainer.esm.js';
|
|
12
11
|
export { AnswerListItem } from './components/AnswersContainer/AnswerListItem.esm.js';
|
|
12
|
+
export { AnswersGridItem } from './components/AnswersContainer/AnswersGridItem.esm.js';
|
|
13
13
|
export { AskQuestionButton } from './components/Buttons/AskQuestionButton.esm.js';
|
|
14
14
|
export { EntityFollowButton } from './components/Buttons/EntityFollowButton.esm.js';
|
|
15
15
|
export { TagFollowButton } from './components/Buttons/TagFollowButton.esm.js';
|
|
@@ -22,6 +22,7 @@ export { UserFollowButton } from './components/Buttons/UserFollowButton.esm.js';
|
|
|
22
22
|
export { CollectionFollowButton } from './components/Buttons/CollectionFollowButton.esm.js';
|
|
23
23
|
export { ButtonContainer } from './components/Buttons/ButtonContainer.esm.js';
|
|
24
24
|
export { ContentHeaderButton } from './components/Buttons/ContentHeaderButton.esm.js';
|
|
25
|
+
export { RankingButtons } from './components/Buttons/RankingButtons.esm.js';
|
|
25
26
|
export { PostHighlightList, PostHighlightListContent } from './components/PostHighlightList/PostHighlightList.esm.js';
|
|
26
27
|
export { PostHighlightListContainer } from './components/PostHighlightList/PostHighlightListContainer.esm.js';
|
|
27
28
|
export { MarkdownRenderer } from './components/MarkdownRenderer/MarkdownRenderer.esm.js';
|
|
@@ -45,13 +46,20 @@ export { BadgeChip } from './components/Badges/BadgeChip.esm.js';
|
|
|
45
46
|
export { UserBadges } from './components/Badges/UserBadges.esm.js';
|
|
46
47
|
export { TopRankingUsers } from './components/TopRankingUsersCard/TopRankingUsersCard.esm.js';
|
|
47
48
|
export { TrophyIcon } from './components/TopRankingUsersCard/TrophyIcon.esm.js';
|
|
48
|
-
export {
|
|
49
|
-
export {
|
|
50
|
-
export {
|
|
51
|
-
export {
|
|
49
|
+
export { TagsContainer } from './components/TagsContainer/TagsContainer.esm.js';
|
|
50
|
+
export { TagGridItem } from './components/TagsContainer/TagGridItem.esm.js';
|
|
51
|
+
export { TagListItem } from './components/TagsContainer/TagListItem.esm.js';
|
|
52
|
+
export { CreateTagModal } from './components/TagsContainer/CreateTagModal.esm.js';
|
|
53
|
+
export { EditTagModal } from './components/TagsContainer/EditTagModal.esm.js';
|
|
54
|
+
export { EntitiesContainer } from './components/EntitiesContainer/EntitiesContainer.esm.js';
|
|
55
|
+
export { EntitiesGridItem } from './components/EntitiesContainer/EntitiesGridItem.esm.js';
|
|
56
|
+
export { EntityListItem } from './components/EntitiesContainer/EntityListItem.esm.js';
|
|
57
|
+
export { UsersContainer } from './components/UsersContainer/UsersContainer.esm.js';
|
|
58
|
+
export { UsersGridItem } from './components/UsersContainer/UsersGridItem.esm.js';
|
|
59
|
+
export { UserListItem } from './components/UsersContainer/UserListItem.esm.js';
|
|
52
60
|
export { ArticleContent } from './components/ArticleContent/ArticleContent.esm.js';
|
|
53
61
|
export { CollectionForm } from './components/CollectionForm/CollectionForm.esm.js';
|
|
54
|
-
export {
|
|
62
|
+
export { CollectionsContainer } from './components/CollectionsContainer/CollectionsContainer.esm.js';
|
|
55
63
|
export { LeftMenu } from './components/LeftMenu/LeftMenu.esm.js';
|
|
56
64
|
export { LeftMenuButton } from './components/LeftMenu/LeftMenuButton.esm.js';
|
|
57
65
|
export { TemplateList } from './components/TemplateList/TemplateList.esm.js';
|
|
@@ -67,10 +75,13 @@ export { DeletedBanner } from './components/Utility/DeletedBanner.esm.js';
|
|
|
67
75
|
export { DraftBanner } from './components/Utility/DraftBanner.esm.js';
|
|
68
76
|
export { ObsoleteBanner } from './components/Utility/ObsoleteBanner.esm.js';
|
|
69
77
|
export { StatusChip } from './components/Utility/StatusChip.esm.js';
|
|
78
|
+
import './components/Utility/QetaPagination.esm.js';
|
|
70
79
|
export { ContentHeaderCard } from './components/ContentHeaderCard/ContentHeaderCard.esm.js';
|
|
71
80
|
export { ContentHeader } from './components/ContentHeader/ContentHeader.esm.js';
|
|
72
81
|
export { ViewToggle } from './components/ViewToggle/ViewToggle.esm.js';
|
|
73
82
|
export { useQetaApi } from './hooks/useQetaApi.esm.js';
|
|
83
|
+
export { useVoting } from './hooks/useVoting.esm.js';
|
|
84
|
+
export { useListItemStyles } from './hooks/useListItemStyles.esm.js';
|
|
74
85
|
export { useTagsFollow } from './hooks/useTagsFollow.esm.js';
|
|
75
86
|
export { useEntityFollow } from './hooks/useEntityFollow.esm.js';
|
|
76
87
|
export { useEntityAuthor, useUserInfo } from './hooks/useEntityAuthor.esm.js';
|
|
@@ -81,5 +92,7 @@ export { useIsModerator } from './hooks/useIsModerator.esm.js';
|
|
|
81
92
|
export { useAI } from './hooks/useAI.esm.js';
|
|
82
93
|
export { useCanReview } from './hooks/useCanReview.esm.js';
|
|
83
94
|
export { useGridPageSize } from './hooks/useGridPageSize.esm.js';
|
|
95
|
+
export { useQetaEntities } from './hooks/useQetaEntities.esm.js';
|
|
96
|
+
export { useUserSettings } from './hooks/useUserSettings.esm.js';
|
|
84
97
|
export { qetaTranslationRef, qetaTranslations } from './translation.esm.js';
|
|
85
98
|
//# sourceMappingURL=index.esm.js.map
|
package/dist/index.esm.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.esm.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;"}
|