@drodil/backstage-plugin-qeta 2.7.0 → 2.8.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/api/QetaClient.esm.js +24 -0
- package/dist/api/QetaClient.esm.js.map +1 -1
- package/dist/components/AskForm/AskForm.esm.js +3 -1
- package/dist/components/AskForm/AskForm.esm.js.map +1 -1
- package/dist/components/Buttons/TagFollowButton.esm.js +26 -0
- package/dist/components/Buttons/TagFollowButton.esm.js.map +1 -0
- package/dist/components/CommentSection/CommentSection.esm.js +3 -1
- package/dist/components/CommentSection/CommentSection.esm.js.map +1 -1
- package/dist/components/HomePage/FollowedTagsList.esm.js +56 -0
- package/dist/components/HomePage/FollowedTagsList.esm.js.map +1 -0
- package/dist/components/HomePage/HomePage.esm.js +2 -1
- package/dist/components/HomePage/HomePage.esm.js.map +1 -1
- package/dist/components/QuestionHighlightList/QuestionHighlightList.esm.js +2 -2
- package/dist/components/QuestionHighlightList/QuestionHighlightList.esm.js.map +1 -1
- package/dist/components/QuestionPage/AnswerForm.esm.js +3 -1
- package/dist/components/QuestionPage/AnswerForm.esm.js.map +1 -1
- package/dist/components/QuestionsContainer/QuestionsContainer.esm.js +4 -0
- package/dist/components/QuestionsContainer/QuestionsContainer.esm.js.map +1 -1
- package/dist/components/TagPage/TagPage.esm.js +2 -0
- package/dist/components/TagPage/TagPage.esm.js.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/locale/fi.esm.js +5 -1
- package/dist/locale/fi.esm.js.map +1 -1
- package/dist/translation.esm.js +6 -0
- package/dist/translation.esm.js.map +1 -1
- package/dist/utils/hooks.esm.js +45 -6
- package/dist/utils/hooks.esm.js.map +1 -1
- package/package.json +3 -3
|
@@ -46,6 +46,7 @@ const AnswerForm = (props) => {
|
|
|
46
46
|
setError(true);
|
|
47
47
|
return;
|
|
48
48
|
}
|
|
49
|
+
setEdited(false);
|
|
49
50
|
analytics.captureEvent("edit", "answer");
|
|
50
51
|
reset();
|
|
51
52
|
onPost(a);
|
|
@@ -62,6 +63,7 @@ const AnswerForm = (props) => {
|
|
|
62
63
|
setError(true);
|
|
63
64
|
return;
|
|
64
65
|
}
|
|
66
|
+
setEdited(false);
|
|
65
67
|
analytics.captureEvent("post", "answer");
|
|
66
68
|
reset();
|
|
67
69
|
onPost(a);
|
|
@@ -82,7 +84,7 @@ const AnswerForm = (props) => {
|
|
|
82
84
|
reset(values);
|
|
83
85
|
}, [values, reset]);
|
|
84
86
|
useEffect(() => {
|
|
85
|
-
confirmNavigationIfEdited(edited);
|
|
87
|
+
return confirmNavigationIfEdited(edited);
|
|
86
88
|
}, [edited]);
|
|
87
89
|
return /* @__PURE__ */ React.createElement(
|
|
88
90
|
RequirePermission,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AnswerForm.esm.js","sources":["../../../src/components/QuestionPage/AnswerForm.tsx"],"sourcesContent":["import { WarningPanel } from '@backstage/core-components';\nimport { Button, Typography } from '@material-ui/core';\nimport React, { useEffect } from 'react';\nimport { configApiRef, useAnalytics, useApi } from '@backstage/core-plugin-api';\nimport {\n AnswerRequest,\n AnswerResponse,\n qetaCreateAnswerPermission,\n QuestionResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useStyles, useTranslation } from '../../utils/hooks';\nimport { Controller, useForm } from 'react-hook-form';\nimport { MarkdownEditor } from '../MarkdownEditor/MarkdownEditor';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { AskAnonymouslyCheckbox } from '../AskAnonymouslyCheckbox/AskAnonymouslyCheckbox';\nimport { qetaApiRef } from '../../api';\nimport { confirmNavigationIfEdited } from '../../utils/utils';\n\nconst getDefaultValues = (questionId: number) => {\n return { questionId, answer: '' };\n};\n\nexport const AnswerForm = (props: {\n question: QuestionResponse;\n onPost: (answer: AnswerResponse) => void;\n id?: number;\n}) => {\n const { question, onPost, id } = props;\n const [values, setValues] = React.useState(getDefaultValues(question.id));\n const analytics = useAnalytics();\n const [error, setError] = React.useState(false);\n const [images, setImages] = React.useState<number[]>([]);\n const [edited, setEdited] = React.useState(false);\n const qetaApi = useApi(qetaApiRef);\n const styles = useStyles();\n const configApi = useApi(configApiRef);\n const allowAnonymouns = configApi.getOptionalBoolean('qeta.allowAnonymous');\n const { t } = useTranslation();\n\n const {\n handleSubmit,\n control,\n formState: { errors },\n reset,\n } = useForm<AnswerRequest>({\n values,\n defaultValues: getDefaultValues(question.id),\n });\n\n const postAnswer = (data: AnswerRequest) => {\n if (id) {\n qetaApi\n .updateAnswer(id, {\n questionId: question.id,\n answer: data.answer,\n images,\n })\n .then(a => {\n if (!a || !('id' in a)) {\n setError(true);\n return;\n }\n analytics.captureEvent('edit', 'answer');\n reset();\n onPost(a);\n })\n .catch(_e => setError(true));\n return;\n }\n // http://localhost:7007/api/qeta/attachments/36e551b1-3be7-479a-8942-b7018434e710\n qetaApi\n .postAnswer({\n questionId: question.id,\n answer: data.answer,\n images,\n anonymous: data.anonymous,\n })\n .then(a => {\n if (!a || !('id' in a)) {\n setError(true);\n return;\n }\n analytics.captureEvent('post', 'answer');\n reset();\n onPost(a);\n })\n .catch(_e => setError(true));\n };\n\n useEffect(() => {\n if (id) {\n qetaApi.getAnswer(question.id, id).then(a => {\n if ('content' in a) {\n setValues({ questionId: question.id, answer: a.content });\n } else {\n setError(true);\n }\n });\n }\n }, [id, question, qetaApi]);\n\n useEffect(() => {\n reset(values);\n }, [values, reset]);\n\n useEffect(() => {\n confirmNavigationIfEdited(edited);\n }, [edited]);\n\n return (\n <RequirePermission\n permission={qetaCreateAnswerPermission}\n errorPage={<></>}\n >\n <form\n onSubmit={handleSubmit(postAnswer)}\n onChange={() => {\n setEdited(true);\n }}\n className=\"qetaAnswerForm\"\n >\n <Typography variant=\"h6\">Your answer</Typography>\n {error && (\n <WarningPanel severity=\"error\" title={t('answerForm.errorPosting')} />\n )}\n <Controller\n control={control}\n defaultValue=\"\"\n rules={{\n required: true,\n }}\n render={({ field: { onChange, value } }) => (\n <MarkdownEditor\n value={value}\n onChange={onChange}\n height={200}\n error={'answer' in errors}\n config={configApi}\n placeholder={t('answerForm.contentInput.placeholder')}\n onImageUpload={(imageId: number) => {\n setImages(prevImages => [...prevImages, imageId]);\n }}\n />\n )}\n name=\"answer\"\n />\n {allowAnonymouns && !id && (\n <AskAnonymouslyCheckbox\n control={control}\n label={t('anonymousCheckbox.answerAnonymously')}\n />\n )}\n <Button\n variant=\"outlined\"\n type=\"submit\"\n color=\"primary\"\n className={`qetaAnswerFormPostBtn ${styles.postButton}`}\n >\n {id\n ? t('answerForm.submit.existingAnswer')\n : t('answerForm.submit.newAnswer')}\n </Button>\n </form>\n </RequirePermission>\n );\n};\n"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"AnswerForm.esm.js","sources":["../../../src/components/QuestionPage/AnswerForm.tsx"],"sourcesContent":["import { WarningPanel } from '@backstage/core-components';\nimport { Button, Typography } from '@material-ui/core';\nimport React, { useEffect } from 'react';\nimport { configApiRef, useAnalytics, useApi } from '@backstage/core-plugin-api';\nimport {\n AnswerRequest,\n AnswerResponse,\n qetaCreateAnswerPermission,\n QuestionResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport { useStyles, useTranslation } from '../../utils/hooks';\nimport { Controller, useForm } from 'react-hook-form';\nimport { MarkdownEditor } from '../MarkdownEditor/MarkdownEditor';\nimport { RequirePermission } from '@backstage/plugin-permission-react';\nimport { AskAnonymouslyCheckbox } from '../AskAnonymouslyCheckbox/AskAnonymouslyCheckbox';\nimport { qetaApiRef } from '../../api';\nimport { confirmNavigationIfEdited } from '../../utils/utils';\n\nconst getDefaultValues = (questionId: number) => {\n return { questionId, answer: '' };\n};\n\nexport const AnswerForm = (props: {\n question: QuestionResponse;\n onPost: (answer: AnswerResponse) => void;\n id?: number;\n}) => {\n const { question, onPost, id } = props;\n const [values, setValues] = React.useState(getDefaultValues(question.id));\n const analytics = useAnalytics();\n const [error, setError] = React.useState(false);\n const [images, setImages] = React.useState<number[]>([]);\n const [edited, setEdited] = React.useState(false);\n const qetaApi = useApi(qetaApiRef);\n const styles = useStyles();\n const configApi = useApi(configApiRef);\n const allowAnonymouns = configApi.getOptionalBoolean('qeta.allowAnonymous');\n const { t } = useTranslation();\n\n const {\n handleSubmit,\n control,\n formState: { errors },\n reset,\n } = useForm<AnswerRequest>({\n values,\n defaultValues: getDefaultValues(question.id),\n });\n\n const postAnswer = (data: AnswerRequest) => {\n if (id) {\n qetaApi\n .updateAnswer(id, {\n questionId: question.id,\n answer: data.answer,\n images,\n })\n .then(a => {\n if (!a || !('id' in a)) {\n setError(true);\n return;\n }\n setEdited(false);\n analytics.captureEvent('edit', 'answer');\n reset();\n onPost(a);\n })\n .catch(_e => setError(true));\n return;\n }\n // http://localhost:7007/api/qeta/attachments/36e551b1-3be7-479a-8942-b7018434e710\n qetaApi\n .postAnswer({\n questionId: question.id,\n answer: data.answer,\n images,\n anonymous: data.anonymous,\n })\n .then(a => {\n if (!a || !('id' in a)) {\n setError(true);\n return;\n }\n setEdited(false);\n analytics.captureEvent('post', 'answer');\n reset();\n onPost(a);\n })\n .catch(_e => setError(true));\n };\n\n useEffect(() => {\n if (id) {\n qetaApi.getAnswer(question.id, id).then(a => {\n if ('content' in a) {\n setValues({ questionId: question.id, answer: a.content });\n } else {\n setError(true);\n }\n });\n }\n }, [id, question, qetaApi]);\n\n useEffect(() => {\n reset(values);\n }, [values, reset]);\n\n useEffect(() => {\n return confirmNavigationIfEdited(edited);\n }, [edited]);\n\n return (\n <RequirePermission\n permission={qetaCreateAnswerPermission}\n errorPage={<></>}\n >\n <form\n onSubmit={handleSubmit(postAnswer)}\n onChange={() => {\n setEdited(true);\n }}\n className=\"qetaAnswerForm\"\n >\n <Typography variant=\"h6\">Your answer</Typography>\n {error && (\n <WarningPanel severity=\"error\" title={t('answerForm.errorPosting')} />\n )}\n <Controller\n control={control}\n defaultValue=\"\"\n rules={{\n required: true,\n }}\n render={({ field: { onChange, value } }) => (\n <MarkdownEditor\n value={value}\n onChange={onChange}\n height={200}\n error={'answer' in errors}\n config={configApi}\n placeholder={t('answerForm.contentInput.placeholder')}\n onImageUpload={(imageId: number) => {\n setImages(prevImages => [...prevImages, imageId]);\n }}\n />\n )}\n name=\"answer\"\n />\n {allowAnonymouns && !id && (\n <AskAnonymouslyCheckbox\n control={control}\n label={t('anonymousCheckbox.answerAnonymously')}\n />\n )}\n <Button\n variant=\"outlined\"\n type=\"submit\"\n color=\"primary\"\n className={`qetaAnswerFormPostBtn ${styles.postButton}`}\n >\n {id\n ? t('answerForm.submit.existingAnswer')\n : t('answerForm.submit.newAnswer')}\n </Button>\n </form>\n </RequirePermission>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -11,6 +11,7 @@ import { EntityRefLink } from '@backstage/plugin-catalog-react';
|
|
|
11
11
|
import { useAnalytics } from '@backstage/core-plugin-api';
|
|
12
12
|
import { filterTags } from '@drodil/backstage-plugin-qeta-common';
|
|
13
13
|
import { getFiltersWithDateRange } from '../../utils/utils.esm.js';
|
|
14
|
+
import { TagFollowButton } from '../Buttons/TagFollowButton.esm.js';
|
|
14
15
|
|
|
15
16
|
const QuestionsContainer = (props) => {
|
|
16
17
|
const {
|
|
@@ -164,6 +165,9 @@ const QuestionsContainer = (props) => {
|
|
|
164
165
|
shownTitle = t("questionsContainer.title.questionsTagged", {
|
|
165
166
|
tags: tags.join(", ")
|
|
166
167
|
});
|
|
168
|
+
if (tags.length === 1) {
|
|
169
|
+
link = /* @__PURE__ */ React.createElement(TagFollowButton, { tag: tags[0] });
|
|
170
|
+
}
|
|
167
171
|
} else if (favorite) {
|
|
168
172
|
shownTitle = t("questionsContainer.title.favorite");
|
|
169
173
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QuestionsContainer.esm.js","sources":["../../../src/components/QuestionsContainer/QuestionsContainer.tsx"],"sourcesContent":["import { useQetaApi, useTranslation } from '../../utils/hooks';\nimport {\n Box,\n Button,\n Collapse,\n Grid,\n TextField,\n Typography,\n} from '@material-ui/core';\n\nimport React, { useEffect } from 'react';\nimport useDebounce from 'react-use/lib/useDebounce';\nimport { FilterKey, filterKeys, FilterPanel, Filters } from './FilterPanel';\nimport { QuestionList } from './QuestionList';\nimport FilterList from '@material-ui/icons/FilterList';\nimport { useSearchParams } from 'react-router-dom';\nimport { AskQuestionButton } from '../Buttons/AskQuestionButton';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { useAnalytics } from '@backstage/core-plugin-api';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport { getFiltersWithDateRange } from '../../utils/utils';\n\nexport interface QuestionsContainerProps {\n tags?: string[];\n author?: string;\n entity?: string;\n showFilters?: boolean;\n showTitle?: boolean;\n title?: string;\n favorite?: boolean;\n showAskButton?: boolean;\n showNoQuestionsBtn?: boolean;\n}\n\nexport const QuestionsContainer = (props: QuestionsContainerProps) => {\n const {\n tags,\n author,\n entity,\n showFilters,\n showTitle,\n title,\n favorite,\n showAskButton,\n showNoQuestionsBtn,\n } = props;\n const analytics = useAnalytics();\n const [page, setPage] = React.useState(1);\n const [questionsPerPage, setQuestionsPerPage] = React.useState(10);\n const [showFilterPanel, setShowFilterPanel] = React.useState(false);\n const [searchParams, setSearchParams] = useSearchParams();\n const [searchQuery, setSearchQuery] = React.useState('');\n const { t } = useTranslation();\n const [filters, setFilters] = React.useState<Filters>({\n order: 'desc',\n orderBy: 'created',\n noAnswers: 'false',\n noCorrectAnswer: 'false',\n noVotes: 'false',\n searchQuery: '',\n entity: entity ?? '',\n tags: tags ?? [],\n dateRange: '',\n });\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 onFilterChange = (key: FilterKey, value: string | string[]) => {\n if (filters[key] === value) {\n return;\n }\n\n setPage(1);\n setFilters({ ...filters, ...{ [key]: value } });\n setSearchParams(prev => {\n const newValue = prev;\n if (!value || value === 'false') {\n newValue.delete(key);\n } else if (Array.isArray(value)) {\n if (value.length === 0) {\n newValue.delete(key);\n } else {\n newValue.set(key, value.join(','));\n }\n } else if (value.length > 0) {\n newValue.set(key, value);\n } else {\n newValue.delete(key);\n }\n return newValue;\n });\n };\n\n const onSearchQueryChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onPageChange(1);\n if (event.target.value) {\n analytics.captureEvent('qeta_search', event.target.value);\n }\n setSearchQuery(event.target.value);\n };\n\n useDebounce(\n () => {\n if (filters.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 }\n } else if (key === 'questionsPerPage') {\n const qpp = Number.parseInt(value, 10);\n if (qpp > 0) setQuestionsPerPage(qpp);\n } else if (filterKeys.includes(key as FilterKey)) {\n filtersApplied = true;\n if (key === 'tags') {\n filters.tags = filterTags(value) ?? [];\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 }, [searchParams, filters]);\n\n const {\n value: response,\n loading,\n error,\n } = useQetaApi(\n api => {\n return api.getQuestions({\n limit: questionsPerPage,\n offset: (page - 1) * questionsPerPage,\n includeEntities: true,\n author,\n favorite,\n ...getFiltersWithDateRange(filters),\n });\n },\n [page, filters, questionsPerPage],\n );\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 setQuestionsPerPage(value);\n setSearchParams(prev => {\n const newValue = prev;\n newValue.set('questionsPerPage', String(value));\n return newValue;\n });\n };\n\n let shownTitle = title;\n let link = undefined;\n if (author) {\n shownTitle = t('questionsContainer.title.questionsBy');\n link = <EntityRefLink entityRef={author} hideIcon defaultKind=\"user\" />;\n } else if (entity) {\n shownTitle = t('questionsContainer.title.questionsAbout');\n link = <EntityRefLink entityRef={entity} />;\n } else if (tags) {\n shownTitle = t('questionsContainer.title.questionsTagged', {\n tags: tags.join(', '),\n });\n } else if (favorite) {\n shownTitle = t('questionsContainer.title.favorite');\n }\n\n return (\n <Box className=\"qetaQuestionsContainer\">\n {showTitle && (\n <Typography\n variant=\"h5\"\n className=\"qetaQuestionsContainerTitle\"\n style={{ marginBottom: '1.5rem' }}\n >\n {shownTitle} {link}\n </Typography>\n )}\n <Grid container justifyContent=\"space-between\">\n <Grid item xs={12} md={4}>\n <TextField\n id=\"search-bar\"\n fullWidth\n onChange={onSearchQueryChange}\n label={t('questionsContainer.search.label')}\n className=\"qetaQuestionsContainerSearchInput\"\n variant=\"outlined\"\n placeholder={t('questionsContainer.search.placeholder')}\n size=\"small\"\n style={{ marginBottom: '5px' }}\n />\n </Grid>\n {showAskButton && (\n <Grid item>\n <AskQuestionButton\n entity={entity ?? filters.entity}\n entityPage={entity !== undefined}\n tags={tags}\n />\n </Grid>\n )}\n </Grid>\n <Grid container justifyContent=\"space-between\">\n <Grid item>\n <Typography\n variant=\"h6\"\n className=\"qetaQuestionsContainerQuestionCount\"\n >\n {t('common.questions', { count: response?.total ?? 0 })}\n </Typography>\n </Grid>\n {(showFilters ?? true) && (\n <Grid item>\n <Button\n onClick={() => setShowFilterPanel(!showFilterPanel)}\n className=\"qetaQuestionsContainerFilterPanelBtn\"\n startIcon={<FilterList />}\n >\n {t('filterPanel.filterButton')}\n </Button>\n </Grid>\n )}\n </Grid>\n {(showFilters ?? true) && (\n <Collapse in={showFilterPanel}>\n <FilterPanel onChange={onFilterChange} filters={filters} />\n </Collapse>\n )}\n\n <QuestionList\n loading={loading}\n error={error}\n response={response}\n onPageChange={onPageChange}\n onPageSizeChange={onPageSizeChange}\n entity={entity}\n page={page}\n pageSize={questionsPerPage}\n showNoQuestionsBtn={showNoQuestionsBtn}\n entityPage={entity !== undefined}\n tags={tags}\n />\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QuestionsContainer.esm.js","sources":["../../../src/components/QuestionsContainer/QuestionsContainer.tsx"],"sourcesContent":["import { useQetaApi, useTranslation } from '../../utils/hooks';\nimport {\n Box,\n Button,\n Collapse,\n Grid,\n TextField,\n Typography,\n} from '@material-ui/core';\n\nimport React, { useEffect } from 'react';\nimport useDebounce from 'react-use/lib/useDebounce';\nimport { FilterKey, filterKeys, FilterPanel, Filters } from './FilterPanel';\nimport { QuestionList } from './QuestionList';\nimport FilterList from '@material-ui/icons/FilterList';\nimport { useSearchParams } from 'react-router-dom';\nimport { AskQuestionButton } from '../Buttons/AskQuestionButton';\nimport { EntityRefLink } from '@backstage/plugin-catalog-react';\nimport { useAnalytics } from '@backstage/core-plugin-api';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport { getFiltersWithDateRange } from '../../utils/utils';\nimport { TagFollowButton } from '../Buttons/TagFollowButton';\n\nexport interface QuestionsContainerProps {\n tags?: string[];\n author?: string;\n entity?: string;\n showFilters?: boolean;\n showTitle?: boolean;\n title?: string;\n favorite?: boolean;\n showAskButton?: boolean;\n showNoQuestionsBtn?: boolean;\n}\n\nexport const QuestionsContainer = (props: QuestionsContainerProps) => {\n const {\n tags,\n author,\n entity,\n showFilters,\n showTitle,\n title,\n favorite,\n showAskButton,\n showNoQuestionsBtn,\n } = props;\n const analytics = useAnalytics();\n const [page, setPage] = React.useState(1);\n const [questionsPerPage, setQuestionsPerPage] = React.useState(10);\n const [showFilterPanel, setShowFilterPanel] = React.useState(false);\n const [searchParams, setSearchParams] = useSearchParams();\n const [searchQuery, setSearchQuery] = React.useState('');\n const { t } = useTranslation();\n const [filters, setFilters] = React.useState<Filters>({\n order: 'desc',\n orderBy: 'created',\n noAnswers: 'false',\n noCorrectAnswer: 'false',\n noVotes: 'false',\n searchQuery: '',\n entity: entity ?? '',\n tags: tags ?? [],\n dateRange: '',\n });\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 onFilterChange = (key: FilterKey, value: string | string[]) => {\n if (filters[key] === value) {\n return;\n }\n\n setPage(1);\n setFilters({ ...filters, ...{ [key]: value } });\n setSearchParams(prev => {\n const newValue = prev;\n if (!value || value === 'false') {\n newValue.delete(key);\n } else if (Array.isArray(value)) {\n if (value.length === 0) {\n newValue.delete(key);\n } else {\n newValue.set(key, value.join(','));\n }\n } else if (value.length > 0) {\n newValue.set(key, value);\n } else {\n newValue.delete(key);\n }\n return newValue;\n });\n };\n\n const onSearchQueryChange = (event: React.ChangeEvent<HTMLInputElement>) => {\n onPageChange(1);\n if (event.target.value) {\n analytics.captureEvent('qeta_search', event.target.value);\n }\n setSearchQuery(event.target.value);\n };\n\n useDebounce(\n () => {\n if (filters.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 }\n } else if (key === 'questionsPerPage') {\n const qpp = Number.parseInt(value, 10);\n if (qpp > 0) setQuestionsPerPage(qpp);\n } else if (filterKeys.includes(key as FilterKey)) {\n filtersApplied = true;\n if (key === 'tags') {\n filters.tags = filterTags(value) ?? [];\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 }, [searchParams, filters]);\n\n const {\n value: response,\n loading,\n error,\n } = useQetaApi(\n api => {\n return api.getQuestions({\n limit: questionsPerPage,\n offset: (page - 1) * questionsPerPage,\n includeEntities: true,\n author,\n favorite,\n ...getFiltersWithDateRange(filters),\n });\n },\n [page, filters, questionsPerPage],\n );\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 setQuestionsPerPage(value);\n setSearchParams(prev => {\n const newValue = prev;\n newValue.set('questionsPerPage', String(value));\n return newValue;\n });\n };\n\n let shownTitle = title;\n let link = undefined;\n if (author) {\n shownTitle = t('questionsContainer.title.questionsBy');\n link = <EntityRefLink entityRef={author} hideIcon defaultKind=\"user\" />;\n } else if (entity) {\n shownTitle = t('questionsContainer.title.questionsAbout');\n link = <EntityRefLink entityRef={entity} />;\n } else if (tags) {\n shownTitle = t('questionsContainer.title.questionsTagged', {\n tags: tags.join(', '),\n });\n if (tags.length === 1) {\n link = <TagFollowButton tag={tags[0]} />;\n }\n } else if (favorite) {\n shownTitle = t('questionsContainer.title.favorite');\n }\n\n return (\n <Box className=\"qetaQuestionsContainer\">\n {showTitle && (\n <Typography\n variant=\"h5\"\n className=\"qetaQuestionsContainerTitle\"\n style={{ marginBottom: '1.5rem' }}\n >\n {shownTitle} {link}\n </Typography>\n )}\n <Grid container justifyContent=\"space-between\">\n <Grid item xs={12} md={4}>\n <TextField\n id=\"search-bar\"\n fullWidth\n onChange={onSearchQueryChange}\n label={t('questionsContainer.search.label')}\n className=\"qetaQuestionsContainerSearchInput\"\n variant=\"outlined\"\n placeholder={t('questionsContainer.search.placeholder')}\n size=\"small\"\n style={{ marginBottom: '5px' }}\n />\n </Grid>\n {showAskButton && (\n <Grid item>\n <AskQuestionButton\n entity={entity ?? filters.entity}\n entityPage={entity !== undefined}\n tags={tags}\n />\n </Grid>\n )}\n </Grid>\n <Grid container justifyContent=\"space-between\">\n <Grid item>\n <Typography\n variant=\"h6\"\n className=\"qetaQuestionsContainerQuestionCount\"\n >\n {t('common.questions', { count: response?.total ?? 0 })}\n </Typography>\n </Grid>\n {(showFilters ?? true) && (\n <Grid item>\n <Button\n onClick={() => setShowFilterPanel(!showFilterPanel)}\n className=\"qetaQuestionsContainerFilterPanelBtn\"\n startIcon={<FilterList />}\n >\n {t('filterPanel.filterButton')}\n </Button>\n </Grid>\n )}\n </Grid>\n {(showFilters ?? true) && (\n <Collapse in={showFilterPanel}>\n <FilterPanel onChange={onFilterChange} filters={filters} />\n </Collapse>\n )}\n <QuestionList\n loading={loading}\n error={error}\n response={response}\n onPageChange={onPageChange}\n onPageSizeChange={onPageSizeChange}\n entity={entity}\n page={page}\n pageSize={questionsPerPage}\n showNoQuestionsBtn={showNoQuestionsBtn}\n entityPage={entity !== undefined}\n tags={tags}\n />\n </Box>\n );\n};\n"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import { AskQuestionButton } from '../Buttons/AskQuestionButton.esm.js';
|
|
|
7
7
|
import { Container } from '@material-ui/core';
|
|
8
8
|
import { BackToQuestionsButton } from '../Buttons/BackToQuestionsButton.esm.js';
|
|
9
9
|
import { useTranslation } from '../../utils/hooks.esm.js';
|
|
10
|
+
import { TagFollowButton } from '../Buttons/TagFollowButton.esm.js';
|
|
10
11
|
|
|
11
12
|
const TagPage = () => {
|
|
12
13
|
const { tag } = useParams();
|
|
@@ -16,6 +17,7 @@ const TagPage = () => {
|
|
|
16
17
|
{
|
|
17
18
|
title: tag ? t("tagPage.taggedWithTitle", { tag }) : t("tagPage.defaultTitle")
|
|
18
19
|
},
|
|
20
|
+
tag && /* @__PURE__ */ React.createElement(TagFollowButton, { tag }),
|
|
19
21
|
/* @__PURE__ */ React.createElement(BackToQuestionsButton, null),
|
|
20
22
|
/* @__PURE__ */ React.createElement(AskQuestionButton, { tags: tag ? [tag] : void 0 })
|
|
21
23
|
), tag ? /* @__PURE__ */ React.createElement(QuestionsContainer, { tags: [tag ?? ""] }) : /* @__PURE__ */ React.createElement(TagsContainer, null)));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagPage.esm.js","sources":["../../../src/components/TagPage/TagPage.tsx"],"sourcesContent":["import React from 'react';\nimport { Content, ContentHeader } from '@backstage/core-components';\nimport { useParams } from 'react-router-dom';\nimport { QuestionsContainer } from '../QuestionsContainer/QuestionsContainer';\nimport { TagsContainer } from './TagsContainer';\nimport { AskQuestionButton } from '../Buttons/AskQuestionButton';\nimport { Container } from '@material-ui/core';\nimport { BackToQuestionsButton } from '../Buttons/BackToQuestionsButton';\nimport { useTranslation } from '../../utils/hooks';\n\nexport const TagPage = () => {\n const { tag } = useParams();\n const { t } = useTranslation();\n return (\n <Content>\n <Container maxWidth=\"lg\">\n <ContentHeader\n title={\n tag\n ? t('tagPage.taggedWithTitle', { tag })\n : t('tagPage.defaultTitle')\n }\n >\n <BackToQuestionsButton />\n <AskQuestionButton tags={tag ? [tag] : undefined} />\n </ContentHeader>\n {tag ? <QuestionsContainer tags={[tag ?? '']} /> : <TagsContainer />}\n </Container>\n </Content>\n );\n};\n"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"TagPage.esm.js","sources":["../../../src/components/TagPage/TagPage.tsx"],"sourcesContent":["import React from 'react';\nimport { Content, ContentHeader } from '@backstage/core-components';\nimport { useParams } from 'react-router-dom';\nimport { QuestionsContainer } from '../QuestionsContainer/QuestionsContainer';\nimport { TagsContainer } from './TagsContainer';\nimport { AskQuestionButton } from '../Buttons/AskQuestionButton';\nimport { Container } from '@material-ui/core';\nimport { BackToQuestionsButton } from '../Buttons/BackToQuestionsButton';\nimport { useTranslation } from '../../utils/hooks';\nimport { TagFollowButton } from '../Buttons/TagFollowButton';\n\nexport const TagPage = () => {\n const { tag } = useParams();\n const { t } = useTranslation();\n return (\n <Content>\n <Container maxWidth=\"lg\">\n <ContentHeader\n title={\n tag\n ? t('tagPage.taggedWithTitle', { tag })\n : t('tagPage.defaultTitle')\n }\n >\n {tag && <TagFollowButton tag={tag} />}\n <BackToQuestionsButton />\n <AskQuestionButton tags={tag ? [tag] : undefined} />\n </ContentHeader>\n {tag ? <QuestionsContainer tags={[tag ?? '']} /> : <TagsContainer />}\n </Container>\n </Content>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;;AAWO,MAAM,UAAU,MAAM;AAC3B,EAAM,MAAA,EAAE,GAAI,EAAA,GAAI,SAAU,EAAA,CAAA;AAC1B,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,IAAA,kBACE,KAAA,CAAA,aAAA,CAAA,SAAA,EAAA,EAAU,UAAS,IAClB,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,aAAA;AAAA,IAAA;AAAA,MACC,KAAA,EACE,MACI,CAAE,CAAA,yBAAA,EAA2B,EAAE,GAAI,EAAC,CACpC,GAAA,CAAA,CAAE,sBAAsB,CAAA;AAAA,KAAA;AAAA,IAG7B,GAAA,oBAAQ,KAAA,CAAA,aAAA,CAAA,eAAA,EAAA,EAAgB,GAAU,EAAA,CAAA;AAAA,wCAClC,qBAAsB,EAAA,IAAA,CAAA;AAAA,wCACtB,iBAAkB,EAAA,EAAA,IAAA,EAAM,MAAM,CAAC,GAAG,IAAI,KAAW,CAAA,EAAA,CAAA;AAAA,GAEnD,EAAA,GAAA,mBAAO,KAAA,CAAA,aAAA,CAAA,kBAAA,EAAA,EAAmB,IAAM,EAAA,CAAC,GAAO,IAAA,EAAE,CAAG,EAAA,CAAA,mBAAM,KAAA,CAAA,aAAA,CAAA,aAAA,EAAA,IAAc,CACpE,CACF,CAAA,CAAA;AAEJ;;;;"}
|
package/dist/index.d.ts
CHANGED
|
@@ -3,7 +3,7 @@ import * as React from 'react';
|
|
|
3
3
|
import React__default, { ReactNode } from 'react';
|
|
4
4
|
import * as _backstage_core_plugin_api from '@backstage/core-plugin-api';
|
|
5
5
|
import { FetchApi, DiscoveryApi } from '@backstage/core-plugin-api';
|
|
6
|
-
import { AnswersResponse, AnswerResponse, QuestionResponse, StatisticResponse, QuestionsResponse, QuestionRequest, TagResponse, EntityResponse, StatisticsRequestParameters, AnswerRequest, AnswerResponseBody, AttachmentResponseBody, Question, Answer } from '@drodil/backstage-plugin-qeta-common';
|
|
6
|
+
import { AnswersResponse, AnswerResponse, QuestionResponse, StatisticResponse, QuestionsResponse, QuestionRequest, TagResponse, EntityResponse, StatisticsRequestParameters, AnswerRequest, AnswerResponseBody, AttachmentResponseBody, UserTagsResponse, Question, Answer } from '@drodil/backstage-plugin-qeta-common';
|
|
7
7
|
import { SvgIconProps } from '@material-ui/core';
|
|
8
8
|
import * as _backstage_core_plugin_api_alpha from '@backstage/core-plugin-api/alpha';
|
|
9
9
|
|
|
@@ -176,6 +176,9 @@ interface QetaApi {
|
|
|
176
176
|
updateAnswer(id: number, answer: AnswerRequest): Promise<AnswerResponseBody>;
|
|
177
177
|
getAnswers(options: GetAnswersOptions): Promise<AnswersResponse>;
|
|
178
178
|
getAnswer(questionId: string | number | undefined, id: string | number | undefined): Promise<AnswerResponseBody>;
|
|
179
|
+
getFollowedTags(): Promise<UserTagsResponse>;
|
|
180
|
+
followTag(tag: string): Promise<boolean>;
|
|
181
|
+
unfollowTag(tag: string): Promise<boolean>;
|
|
179
182
|
}
|
|
180
183
|
|
|
181
184
|
declare const qetaApiRef: _backstage_core_plugin_api.ApiRef<QetaApi>;
|
|
@@ -212,6 +215,9 @@ declare class QetaClient implements QetaApi {
|
|
|
212
215
|
updateAnswer(id: number, answer: AnswerRequest): Promise<AnswerResponseBody>;
|
|
213
216
|
getAnswers(options: GetAnswersOptions): Promise<AnswersResponse>;
|
|
214
217
|
getAnswer(questionId: string | number | undefined, id: string | number | undefined): Promise<AnswerResponseBody>;
|
|
218
|
+
getFollowedTags(): Promise<UserTagsResponse>;
|
|
219
|
+
followTag(tag: string): Promise<boolean>;
|
|
220
|
+
unfollowTag(tag: string): Promise<boolean>;
|
|
215
221
|
postAttachment(file: Blob): Promise<AttachmentResponseBody>;
|
|
216
222
|
getMostUpvotedAnswers(options: StatisticsRequestParameters): Promise<StatisticResponse>;
|
|
217
223
|
getMostUpvotedCorrectAnswers(options: StatisticsRequestParameters): Promise<StatisticResponse>;
|
|
@@ -302,6 +308,7 @@ declare const qetaTranslationRef: _backstage_core_plugin_api_alpha.TranslationRe
|
|
|
302
308
|
readonly "deleteModal.cancelButton": "Cancel";
|
|
303
309
|
readonly "favoritePage.title": "Your favorite questions";
|
|
304
310
|
readonly "homePage.title": "All questions";
|
|
311
|
+
readonly "homePage.followedTags": "Followed tags";
|
|
305
312
|
readonly "homePage.moreMenu.statistics": "Statistics";
|
|
306
313
|
readonly "homePage.moreMenu.tags": "Tags";
|
|
307
314
|
readonly "homePage.moreMenu.title": "More";
|
|
@@ -397,6 +404,9 @@ declare const qetaTranslationRef: _backstage_core_plugin_api_alpha.TranslationRe
|
|
|
397
404
|
readonly "userPage.questions": "Questions";
|
|
398
405
|
readonly "userPage.answers": "Answers";
|
|
399
406
|
readonly "userPage.profileTab": "Profile";
|
|
407
|
+
readonly "tagButton.tooltip": "By following a tag, you will get notified when ever a new question with that tag is posted";
|
|
408
|
+
readonly "tagButton.follow": "Follow tag";
|
|
409
|
+
readonly "tagButton.unfollow": "Unfollow tag";
|
|
400
410
|
}>;
|
|
401
411
|
declare const qetaTranslations: _backstage_core_plugin_api_alpha.TranslationResource<"qeta">;
|
|
402
412
|
|
package/dist/locale/fi.esm.js
CHANGED
|
@@ -70,6 +70,7 @@ const fi = createTranslationMessages({
|
|
|
70
70
|
"homePage.moreMenu.favoriteQuestions": "Suosikkikysymykset",
|
|
71
71
|
"homePage.moreMenu.statistics": "Statistiikka",
|
|
72
72
|
"homePage.title": "Kaikki kysymykset",
|
|
73
|
+
"homePage.followedTags": "Seuratut t\xE4git",
|
|
73
74
|
"homePage.highlights.loadError": "Kysymyksi\xE4 ei voitu ladata",
|
|
74
75
|
"homePage.highlights.hot.title": "Kuumat kysymykset",
|
|
75
76
|
"homePage.highlights.hot.noQuestionsLabel": "Ei kysymyksi\xE4",
|
|
@@ -177,7 +178,10 @@ const fi = createTranslationMessages({
|
|
|
177
178
|
"tagPage.tags_other": "{{count}} t\xE4gi\xE4",
|
|
178
179
|
"userPage.profileTab": "Profiili",
|
|
179
180
|
"userPage.questions": "Kysymykset",
|
|
180
|
-
"userPage.answers": "Vastaukset"
|
|
181
|
+
"userPage.answers": "Vastaukset",
|
|
182
|
+
"tagButton.follow": "Seuraa t\xE4gi\xE4",
|
|
183
|
+
"tagButton.unfollow": "Lopeta t\xE4gin seuraaminen",
|
|
184
|
+
"tagButton.tooltip": "Seuraamalla t\xE4gi\xE4 saat ilmoituksia uusista kysymyksist\xE4"
|
|
181
185
|
}
|
|
182
186
|
});
|
|
183
187
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fi.esm.js","sources":["../../src/locale/fi.ts"],"sourcesContent":["import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../translation';\n\nconst fi = createTranslationMessages({\n ref: qetaTranslationRef,\n full: false,\n messages: {\n pluginName: 'Q&A',\n 'answerList.errorLoading': 'Vastauksia ei voitu ladata',\n 'answerList.noAnswers': 'Ei vastauksia',\n 'answerList.limitSelect': 'Vastauksia per sivu',\n 'common.score': '{{score}} pistettä',\n 'common.anonymousAuthor': 'Anonyymi',\n 'common.answers_zero': 'Ei vastauksia',\n 'common.answers_one': '{{count}} vastaus',\n 'common.answers_other': '{{count}} vastausta',\n 'common.views_zero': 'Katsottu {{count}} kertaa',\n 'common.views_one': 'Katsottu {{count}} kerran',\n 'common.views_other': 'Katsottu {{count}} kertaa',\n 'common.viewsShort_zero': '0 katselua',\n 'common.viewsShort_one': '1 katselu',\n 'common.viewsShort_other': '{{count}} katselua',\n 'common.questions_zero': 'Ei kysymyksiä',\n 'common.questions_one': '{{count}} kysymys',\n 'common.questions_other': '{{count}} kysymystä',\n 'answer.questionTitle': 'K: {{question}}',\n 'answer.answeredTime': 'vastasi',\n 'answerContainer.title.answersBy': 'Vastannut',\n 'answerContainer.title.answersAbout': 'Vastaukset entiteetistä',\n 'answerContainer.title.answersTagged': 'Vastaukset tageilla {{tags}}',\n 'answerContainer.search.label': 'Hae vastauksia',\n 'answerContainer.search.placeholder': 'Hae...',\n 'anonymousCheckbox.tooltip':\n 'Valitsemalla tämän muut käyttäjät eivät näe nimeäsi',\n 'anonymousCheckbox.answerAnonymously': 'Vastaa anonyymisti',\n 'anonymousCheckbox.askAnonymously': 'Kysy anonyymisti',\n 'askForm.errorPosting': 'Kysymystä ei voitu luoda',\n 'askForm.titleInput.label': 'Otsikko',\n 'askForm.titleInput.helperText':\n 'Kirjoita kysymyksellesi hyvä otsikko, jonka ihmiset ymmärtävät',\n 'askForm.contentInput.placeholder': 'Kysymyksesi',\n 'askForm.submit.existingQuestion': 'Tallenna',\n 'askForm.submit.newQuestion': 'Kysy',\n 'answerForm.errorPosting': 'Vastausta ei voitu luoda',\n 'answerForm.contentInput.placeholder': 'Vastauksesi',\n 'answerForm.submit.existingAnswer': 'Tallenna',\n 'answerForm.submit.newAnswer': 'Vastaa',\n 'entitiesInput.label': 'Entiteetit',\n 'entitiesInput.placeholder': 'Kirjoita tai valitse entiteetit',\n 'entitiesInput.helperText':\n 'Valitse maksimissaan {{max}} entiteettiä joita tämä kysymys koskee',\n 'tagsInput.label': 'Tägit',\n 'tagsInput.placeholder': 'Kirjoita tai valitse tägit',\n 'tagsInput.helperText':\n 'Valitse maksimissaan {{max}} tägiä jotka kategorisoivat kysymyksen',\n 'askPage.title.existingQuestion': 'Muokkaa kysymystä',\n 'askPage.title.entityQuestion': 'Kysy kysmys entiteetistä {{entity}}',\n 'askPage.title.newQuestion': 'Kysy kysymys',\n 'askQuestionButton.title': 'Kysy kysymys',\n 'backToQuestionsButton.title': 'Takaisin kysymyksiin',\n 'commentList.deleteLink': 'poista',\n 'commentSection.input.placeholder': 'Kommenttisi',\n 'commentSection.addComment': 'Kommentoi',\n 'commentSection.post': 'Tallenna',\n 'deleteModal.title.question':\n 'Oletko varma että haluat poistaa tämän kysymyksen?',\n 'deleteModal.title.answer':\n 'Oletko varma että haluat poistaa tämän vastauksen?',\n 'deleteModal.errorDeleting': 'Virhe poistettaessa',\n 'deleteModal.deleteButton': 'Poista',\n 'deleteModal.cancelButton': 'Peruuta',\n 'favoritePage.title': 'Suosikkikysymyksesi',\n 'homePage.moreMenu.title': 'Lisää',\n 'homePage.moreMenu.profile': 'Profiili',\n 'homePage.moreMenu.tags': 'Tägit',\n 'homePage.moreMenu.favoriteQuestions': 'Suosikkikysymykset',\n 'homePage.moreMenu.statistics': 'Statistiikka',\n 'homePage.title': 'Kaikki kysymykset',\n 'homePage.highlights.loadError': 'Kysymyksiä ei voitu ladata',\n 'homePage.highlights.hot.title': 'Kuumat kysymykset',\n 'homePage.highlights.hot.noQuestionsLabel': 'Ei kysymyksiä',\n 'homePage.highlights.unanswered.title': 'Vastaamattomat kysymykset',\n 'homePage.highlights.unanswered.noQuestionsLabel': 'Ei kysymyksiä',\n 'homePage.highlights.incorrect.title': 'Kysymykset ilman oikeaa vastausta',\n 'homePage.highlights.incorrect.noQuestionsLabel': 'Ei kysymyksiä',\n 'userLink.anonymous': 'Anonyymi',\n 'questionPage.errorLoading': 'Kysymyksiä ei voitu ladata',\n 'questionPage.editButton': 'Muokkaa',\n 'questionPage.sortAnswers.label': 'Järjestä vastaukset',\n 'questionPage.sortAnswers.default': 'Oletus',\n 'questionPage.sortAnswers.createdDesc': 'Luotu (laskeva)',\n 'questionPage.sortAnswers.createdAsc': 'Luotu (nouseva)',\n 'questionPage.sortAnswers.scoreDesc': 'Pisteet (laskeva)',\n 'questionPage.sortAnswers.scoreAsc': 'Pisteet (nouseva)',\n 'questionPage.sortAnswers.commentsDesc': 'Kommentit (laskeva)',\n 'questionPage.sortAnswers.commentsAsc': 'Kommentit (nouseva)',\n 'questionPage.sortAnswers.authorDesc': 'Laatija (laskeva)',\n 'questionPage.sortAnswers.authorAsc': 'Laatija (nouseva)',\n 'questionPage.sortAnswers.updatedDesc': 'Päivitetty (laskeva)',\n 'questionPage.sortAnswers.updatedAsc': 'Päivitetty (nouseva)',\n 'authorBox.askedAtTime': 'kysytty',\n 'authorBox.postedAtTime': 'Lisätty',\n 'authorBox.updatedAtTime': 'Päivitetty',\n 'authorBox.updatedBy': '',\n 'favorite.remove': 'Poista tämä kysymys suosikeista',\n 'favorite.add': 'Lisää tämä kysymys suosikkeihin',\n 'link.question': 'Kopioi linkki tähän kysymykseen leikepöydälle',\n 'link.answer': 'Kopioi linkki tähän vastaukseen leikepöydälle',\n 'link.aria': 'Kopioi linkki leikepöydälle',\n 'voteButtons.answer.markCorrect': 'Merkitse vastaus oikeaksi',\n 'voteButtons.answer.markIncorrect': 'Vastaus ei ole oikein',\n 'voteButtons.answer.marked': 'Tämä vastaus on merkitty oikeaksi',\n 'voteButtons.answer.good': 'Tämä vastaus on hyvä',\n 'voteButtons.answer.bad': 'Tämä vastaus on huono',\n 'voteButtons.answer.own': 'Et voi äänestää omaa vastaustasi',\n 'voteButtons.question.good': 'Tämä kysymys on hyvä',\n 'voteButtons.question.bad': 'Tämä kysymys on huono',\n 'voteButtons.question.own': 'Et voi äänestää omaa kysymystäsi',\n 'datePicker.from': 'Alku',\n 'datePicker.to': 'Loppu',\n 'datePicker.invalidRange':\n 'Päivien väli on väärin, loppuajan pitää olla suurempi kuin alkuajan',\n 'datePicker.range.label': 'Aikaväli',\n 'datePicker.range.default': 'Valitse',\n 'datePicker.range.last7days': 'Viimeiset 7 päivää',\n 'datePicker.range.last30days': 'Viimeiset 30 päivää',\n 'datePicker.range.custom': 'Vapaa valinta',\n 'filterPanel.filterButton': 'Suodata',\n 'filterPanel.noAnswers.label': 'Ei vastauksia',\n 'filterPanel.noCorrectAnswers.label': 'Ei oikeita vastauksia',\n 'filterPanel.noVotes.label': 'Ei ääniä',\n 'filterPanel.orderBy.label': 'Järjestä',\n 'filterPanel.orderBy.created': 'Luotu',\n 'filterPanel.orderBy.views': 'Katsomiskerrat',\n 'filterPanel.orderBy.score': 'Pisteet',\n 'filterPanel.orderBy.answers': 'Vastaukset',\n 'filterPanel.orderBy.updated': 'Päivitetty',\n 'filterPanel.order.label': 'Suunta',\n 'filterPanel.order.asc': 'Nouseva',\n 'filterPanel.order.desc': 'Laskeva',\n 'filterPanel.filters.label': 'Suodattimet',\n 'filterPanel.filters.entity.label': 'Entiteetti',\n 'filterPanel.filters.entity.placeholder': 'Kirjoita tai valitse entiteetti',\n 'filterPanel.filters.tag.label': 'Tägi',\n 'filterPanel.filters.tag.placeholder': 'Kirjoita tai valitse tägi',\n 'questionList.errorLoading': 'Kysymyksiä ei voitu ladata',\n 'questionList.questionsPerPage': 'Kysymyksiä per sivu',\n 'questionsContainer.title.questionsBy': 'Kysynyt',\n 'questionsContainer.title.questionsAbout': 'Kysymykset entiteestistä',\n 'questionsContainer.title.questionsTagged': 'Kysymykset tägeillä {{tags}}',\n 'questionsContainer.title.favorite': 'Suosikkikysymyksesi',\n 'questionsContainer.search.label': 'Hae kysymyksiä',\n 'questionsContainer.search.placeholder': 'Hae...',\n 'questionsContainer.noQuestions': 'Ei kysymyksiä',\n 'questionsContainer.askOneButton': 'Anna mennä ja kysy yksi!',\n 'questionsTable.errorLoading': 'Kysymyksiä ei voitu ladata',\n 'questionsTable.latest': 'Viimeisimmät',\n 'questionsTable.mostViewed': 'Eniten katsotut',\n 'questionsTable.favorites': 'Suosikit',\n 'questionsTable.cells.title': 'Otsikko',\n 'questionsTable.cells.author': 'Kysyjä',\n 'questionsTable.cells.asked': 'Kysytty',\n 'questionsTable.cells.updated': 'Päivitetty',\n 'statistics.errorLoading': 'Statistiikkaa ei voitu ladata',\n 'statistics.notAvailable': 'Statistiikka ei ole saatavissa',\n 'statistics.ranking': 'Sijoitukset 🏆',\n 'statistics.mostQuestions.title': 'Eniten kysymyksiä',\n 'statistics.mostQuestions.description': 'Eniten kysymyksiä kysyneet',\n 'statistics.mostAnswers.title': 'Entiten vastauksia',\n 'statistics.mostAnswers.description': 'Eniten vastauksia lisänneet',\n 'statistics.topVotedQuestions.title': 'Eniten äänestetyt kysymykset',\n 'statistics.topVotedQuestions.description':\n 'Eniten ääniä keränneet kysyjät',\n 'statistics.topVotedAnswers.title': 'Eniten äänestetyt vastaukset',\n 'statistics.topVotedAnswers.description':\n 'Eniten ääniä keränneet vastaajat',\n 'statistics.topVotedCorrectAnswers.title':\n 'Eniten äänestetyt oikeat vastaukset',\n 'statistics.topVotedCorrectAnswers.description':\n 'Eniten ääniä keränneet oikein vastanneet',\n 'tagPage.errorLoading': 'Tägejä ei voitu ladata',\n 'tagPage.taggedWithTitle': 'Kysymykset tägillä {{tag}}',\n 'tagPage.defaultTitle': 'Tägit',\n 'tagPage.search.label': 'Hae tägiä',\n 'tagPage.search.placeholder': 'Hae...',\n 'tagPage.tags_zero': 'Ei tägejä',\n 'tagPage.tags_one': '{{count}} tägi',\n 'tagPage.tags_other': '{{count}} tägiä',\n 'userPage.profileTab': 'Profiili',\n 'userPage.questions': 'Kysymykset',\n 'userPage.answers': 'Vastaukset',\n },\n});\n\nexport default fi;\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fi.esm.js","sources":["../../src/locale/fi.ts"],"sourcesContent":["import { createTranslationMessages } from '@backstage/core-plugin-api/alpha';\nimport { qetaTranslationRef } from '../translation';\n\nconst fi = createTranslationMessages({\n ref: qetaTranslationRef,\n full: false,\n messages: {\n pluginName: 'Q&A',\n 'answerList.errorLoading': 'Vastauksia ei voitu ladata',\n 'answerList.noAnswers': 'Ei vastauksia',\n 'answerList.limitSelect': 'Vastauksia per sivu',\n 'common.score': '{{score}} pistettä',\n 'common.anonymousAuthor': 'Anonyymi',\n 'common.answers_zero': 'Ei vastauksia',\n 'common.answers_one': '{{count}} vastaus',\n 'common.answers_other': '{{count}} vastausta',\n 'common.views_zero': 'Katsottu {{count}} kertaa',\n 'common.views_one': 'Katsottu {{count}} kerran',\n 'common.views_other': 'Katsottu {{count}} kertaa',\n 'common.viewsShort_zero': '0 katselua',\n 'common.viewsShort_one': '1 katselu',\n 'common.viewsShort_other': '{{count}} katselua',\n 'common.questions_zero': 'Ei kysymyksiä',\n 'common.questions_one': '{{count}} kysymys',\n 'common.questions_other': '{{count}} kysymystä',\n 'answer.questionTitle': 'K: {{question}}',\n 'answer.answeredTime': 'vastasi',\n 'answerContainer.title.answersBy': 'Vastannut',\n 'answerContainer.title.answersAbout': 'Vastaukset entiteetistä',\n 'answerContainer.title.answersTagged': 'Vastaukset tageilla {{tags}}',\n 'answerContainer.search.label': 'Hae vastauksia',\n 'answerContainer.search.placeholder': 'Hae...',\n 'anonymousCheckbox.tooltip':\n 'Valitsemalla tämän muut käyttäjät eivät näe nimeäsi',\n 'anonymousCheckbox.answerAnonymously': 'Vastaa anonyymisti',\n 'anonymousCheckbox.askAnonymously': 'Kysy anonyymisti',\n 'askForm.errorPosting': 'Kysymystä ei voitu luoda',\n 'askForm.titleInput.label': 'Otsikko',\n 'askForm.titleInput.helperText':\n 'Kirjoita kysymyksellesi hyvä otsikko, jonka ihmiset ymmärtävät',\n 'askForm.contentInput.placeholder': 'Kysymyksesi',\n 'askForm.submit.existingQuestion': 'Tallenna',\n 'askForm.submit.newQuestion': 'Kysy',\n 'answerForm.errorPosting': 'Vastausta ei voitu luoda',\n 'answerForm.contentInput.placeholder': 'Vastauksesi',\n 'answerForm.submit.existingAnswer': 'Tallenna',\n 'answerForm.submit.newAnswer': 'Vastaa',\n 'entitiesInput.label': 'Entiteetit',\n 'entitiesInput.placeholder': 'Kirjoita tai valitse entiteetit',\n 'entitiesInput.helperText':\n 'Valitse maksimissaan {{max}} entiteettiä joita tämä kysymys koskee',\n 'tagsInput.label': 'Tägit',\n 'tagsInput.placeholder': 'Kirjoita tai valitse tägit',\n 'tagsInput.helperText':\n 'Valitse maksimissaan {{max}} tägiä jotka kategorisoivat kysymyksen',\n 'askPage.title.existingQuestion': 'Muokkaa kysymystä',\n 'askPage.title.entityQuestion': 'Kysy kysmys entiteetistä {{entity}}',\n 'askPage.title.newQuestion': 'Kysy kysymys',\n 'askQuestionButton.title': 'Kysy kysymys',\n 'backToQuestionsButton.title': 'Takaisin kysymyksiin',\n 'commentList.deleteLink': 'poista',\n 'commentSection.input.placeholder': 'Kommenttisi',\n 'commentSection.addComment': 'Kommentoi',\n 'commentSection.post': 'Tallenna',\n 'deleteModal.title.question':\n 'Oletko varma että haluat poistaa tämän kysymyksen?',\n 'deleteModal.title.answer':\n 'Oletko varma että haluat poistaa tämän vastauksen?',\n 'deleteModal.errorDeleting': 'Virhe poistettaessa',\n 'deleteModal.deleteButton': 'Poista',\n 'deleteModal.cancelButton': 'Peruuta',\n 'favoritePage.title': 'Suosikkikysymyksesi',\n 'homePage.moreMenu.title': 'Lisää',\n 'homePage.moreMenu.profile': 'Profiili',\n 'homePage.moreMenu.tags': 'Tägit',\n 'homePage.moreMenu.favoriteQuestions': 'Suosikkikysymykset',\n 'homePage.moreMenu.statistics': 'Statistiikka',\n 'homePage.title': 'Kaikki kysymykset',\n 'homePage.followedTags': 'Seuratut tägit',\n 'homePage.highlights.loadError': 'Kysymyksiä ei voitu ladata',\n 'homePage.highlights.hot.title': 'Kuumat kysymykset',\n 'homePage.highlights.hot.noQuestionsLabel': 'Ei kysymyksiä',\n 'homePage.highlights.unanswered.title': 'Vastaamattomat kysymykset',\n 'homePage.highlights.unanswered.noQuestionsLabel': 'Ei kysymyksiä',\n 'homePage.highlights.incorrect.title': 'Kysymykset ilman oikeaa vastausta',\n 'homePage.highlights.incorrect.noQuestionsLabel': 'Ei kysymyksiä',\n 'userLink.anonymous': 'Anonyymi',\n 'questionPage.errorLoading': 'Kysymyksiä ei voitu ladata',\n 'questionPage.editButton': 'Muokkaa',\n 'questionPage.sortAnswers.label': 'Järjestä vastaukset',\n 'questionPage.sortAnswers.default': 'Oletus',\n 'questionPage.sortAnswers.createdDesc': 'Luotu (laskeva)',\n 'questionPage.sortAnswers.createdAsc': 'Luotu (nouseva)',\n 'questionPage.sortAnswers.scoreDesc': 'Pisteet (laskeva)',\n 'questionPage.sortAnswers.scoreAsc': 'Pisteet (nouseva)',\n 'questionPage.sortAnswers.commentsDesc': 'Kommentit (laskeva)',\n 'questionPage.sortAnswers.commentsAsc': 'Kommentit (nouseva)',\n 'questionPage.sortAnswers.authorDesc': 'Laatija (laskeva)',\n 'questionPage.sortAnswers.authorAsc': 'Laatija (nouseva)',\n 'questionPage.sortAnswers.updatedDesc': 'Päivitetty (laskeva)',\n 'questionPage.sortAnswers.updatedAsc': 'Päivitetty (nouseva)',\n 'authorBox.askedAtTime': 'kysytty',\n 'authorBox.postedAtTime': 'Lisätty',\n 'authorBox.updatedAtTime': 'Päivitetty',\n 'authorBox.updatedBy': '',\n 'favorite.remove': 'Poista tämä kysymys suosikeista',\n 'favorite.add': 'Lisää tämä kysymys suosikkeihin',\n 'link.question': 'Kopioi linkki tähän kysymykseen leikepöydälle',\n 'link.answer': 'Kopioi linkki tähän vastaukseen leikepöydälle',\n 'link.aria': 'Kopioi linkki leikepöydälle',\n 'voteButtons.answer.markCorrect': 'Merkitse vastaus oikeaksi',\n 'voteButtons.answer.markIncorrect': 'Vastaus ei ole oikein',\n 'voteButtons.answer.marked': 'Tämä vastaus on merkitty oikeaksi',\n 'voteButtons.answer.good': 'Tämä vastaus on hyvä',\n 'voteButtons.answer.bad': 'Tämä vastaus on huono',\n 'voteButtons.answer.own': 'Et voi äänestää omaa vastaustasi',\n 'voteButtons.question.good': 'Tämä kysymys on hyvä',\n 'voteButtons.question.bad': 'Tämä kysymys on huono',\n 'voteButtons.question.own': 'Et voi äänestää omaa kysymystäsi',\n 'datePicker.from': 'Alku',\n 'datePicker.to': 'Loppu',\n 'datePicker.invalidRange':\n 'Päivien väli on väärin, loppuajan pitää olla suurempi kuin alkuajan',\n 'datePicker.range.label': 'Aikaväli',\n 'datePicker.range.default': 'Valitse',\n 'datePicker.range.last7days': 'Viimeiset 7 päivää',\n 'datePicker.range.last30days': 'Viimeiset 30 päivää',\n 'datePicker.range.custom': 'Vapaa valinta',\n 'filterPanel.filterButton': 'Suodata',\n 'filterPanel.noAnswers.label': 'Ei vastauksia',\n 'filterPanel.noCorrectAnswers.label': 'Ei oikeita vastauksia',\n 'filterPanel.noVotes.label': 'Ei ääniä',\n 'filterPanel.orderBy.label': 'Järjestä',\n 'filterPanel.orderBy.created': 'Luotu',\n 'filterPanel.orderBy.views': 'Katsomiskerrat',\n 'filterPanel.orderBy.score': 'Pisteet',\n 'filterPanel.orderBy.answers': 'Vastaukset',\n 'filterPanel.orderBy.updated': 'Päivitetty',\n 'filterPanel.order.label': 'Suunta',\n 'filterPanel.order.asc': 'Nouseva',\n 'filterPanel.order.desc': 'Laskeva',\n 'filterPanel.filters.label': 'Suodattimet',\n 'filterPanel.filters.entity.label': 'Entiteetti',\n 'filterPanel.filters.entity.placeholder': 'Kirjoita tai valitse entiteetti',\n 'filterPanel.filters.tag.label': 'Tägi',\n 'filterPanel.filters.tag.placeholder': 'Kirjoita tai valitse tägi',\n 'questionList.errorLoading': 'Kysymyksiä ei voitu ladata',\n 'questionList.questionsPerPage': 'Kysymyksiä per sivu',\n 'questionsContainer.title.questionsBy': 'Kysynyt',\n 'questionsContainer.title.questionsAbout': 'Kysymykset entiteestistä',\n 'questionsContainer.title.questionsTagged': 'Kysymykset tägeillä {{tags}}',\n 'questionsContainer.title.favorite': 'Suosikkikysymyksesi',\n 'questionsContainer.search.label': 'Hae kysymyksiä',\n 'questionsContainer.search.placeholder': 'Hae...',\n 'questionsContainer.noQuestions': 'Ei kysymyksiä',\n 'questionsContainer.askOneButton': 'Anna mennä ja kysy yksi!',\n 'questionsTable.errorLoading': 'Kysymyksiä ei voitu ladata',\n 'questionsTable.latest': 'Viimeisimmät',\n 'questionsTable.mostViewed': 'Eniten katsotut',\n 'questionsTable.favorites': 'Suosikit',\n 'questionsTable.cells.title': 'Otsikko',\n 'questionsTable.cells.author': 'Kysyjä',\n 'questionsTable.cells.asked': 'Kysytty',\n 'questionsTable.cells.updated': 'Päivitetty',\n 'statistics.errorLoading': 'Statistiikkaa ei voitu ladata',\n 'statistics.notAvailable': 'Statistiikka ei ole saatavissa',\n 'statistics.ranking': 'Sijoitukset 🏆',\n 'statistics.mostQuestions.title': 'Eniten kysymyksiä',\n 'statistics.mostQuestions.description': 'Eniten kysymyksiä kysyneet',\n 'statistics.mostAnswers.title': 'Entiten vastauksia',\n 'statistics.mostAnswers.description': 'Eniten vastauksia lisänneet',\n 'statistics.topVotedQuestions.title': 'Eniten äänestetyt kysymykset',\n 'statistics.topVotedQuestions.description':\n 'Eniten ääniä keränneet kysyjät',\n 'statistics.topVotedAnswers.title': 'Eniten äänestetyt vastaukset',\n 'statistics.topVotedAnswers.description':\n 'Eniten ääniä keränneet vastaajat',\n 'statistics.topVotedCorrectAnswers.title':\n 'Eniten äänestetyt oikeat vastaukset',\n 'statistics.topVotedCorrectAnswers.description':\n 'Eniten ääniä keränneet oikein vastanneet',\n 'tagPage.errorLoading': 'Tägejä ei voitu ladata',\n 'tagPage.taggedWithTitle': 'Kysymykset tägillä {{tag}}',\n 'tagPage.defaultTitle': 'Tägit',\n 'tagPage.search.label': 'Hae tägiä',\n 'tagPage.search.placeholder': 'Hae...',\n 'tagPage.tags_zero': 'Ei tägejä',\n 'tagPage.tags_one': '{{count}} tägi',\n 'tagPage.tags_other': '{{count}} tägiä',\n 'userPage.profileTab': 'Profiili',\n 'userPage.questions': 'Kysymykset',\n 'userPage.answers': 'Vastaukset',\n 'tagButton.follow': 'Seuraa tägiä',\n 'tagButton.unfollow': 'Lopeta tägin seuraaminen',\n 'tagButton.tooltip':\n 'Seuraamalla tägiä saat ilmoituksia uusista kysymyksistä',\n },\n});\n\nexport default fi;\n"],"names":[],"mappings":"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"}
|
package/dist/translation.esm.js
CHANGED
|
@@ -123,6 +123,7 @@ const qetaTranslationRef = createTranslationRef({
|
|
|
123
123
|
statistics: "Statistics"
|
|
124
124
|
},
|
|
125
125
|
title: "All questions",
|
|
126
|
+
followedTags: "Followed tags",
|
|
126
127
|
highlights: {
|
|
127
128
|
loadError: "Failed to load questions",
|
|
128
129
|
hot: {
|
|
@@ -309,6 +310,11 @@ const qetaTranslationRef = createTranslationRef({
|
|
|
309
310
|
profileTab: "Profile",
|
|
310
311
|
questions: "Questions",
|
|
311
312
|
answers: "Answers"
|
|
313
|
+
},
|
|
314
|
+
tagButton: {
|
|
315
|
+
follow: "Follow tag",
|
|
316
|
+
unfollow: "Unfollow tag",
|
|
317
|
+
tooltip: "By following a tag, you will get notified when ever a new question with that tag is posted"
|
|
312
318
|
}
|
|
313
319
|
}
|
|
314
320
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["import {\n createTranslationRef,\n createTranslationResource,\n} from '@backstage/core-plugin-api/alpha';\n\n/** @alpha */\nexport const qetaTranslationRef = createTranslationRef({\n id: 'qeta',\n messages: {\n pluginName: 'Q&A',\n answerList: {\n errorLoading: 'Could not load answers',\n noAnswers: 'No answers',\n limitSelect: 'Answers per page',\n },\n common: {\n score: '{{score}} score',\n anonymousAuthor: 'Anonymous',\n answers_zero: 'No answers',\n answers_one: '{{count}} answer',\n answers_other: '{{count}} answers',\n views_zero: 'Viewed {{count}} times',\n views_one: 'Viewed {{count}} time',\n views_other: 'Viewed {{count}} times',\n viewsShort_zero: '0 views',\n viewsShort_one: '{{count}} view',\n viewsShort_other: '{{count}} views',\n questions_zero: 'No questions',\n questions_one: '{{count}} question',\n questions_other: '{{count}} questions',\n },\n answer: {\n questionTitle: 'Q: {{question}}',\n answeredTime: 'answered',\n },\n answerContainer: {\n title: {\n answersBy: 'Answers by',\n answersAbout: 'Answers about',\n answersTagged: `Answers tagged with {{tags}}`,\n },\n search: {\n label: 'Search for answers',\n placeholder: 'Search...',\n },\n },\n anonymousCheckbox: {\n tooltip:\n \"By enabling this, other users won't be able to see you as an author\",\n answerAnonymously: 'Answer anonymously',\n askAnonymously: 'Ask anonymously',\n },\n askForm: {\n errorPosting: 'Could not post question',\n titleInput: {\n label: 'Title',\n helperText:\n 'Write good title for your question that people can understand',\n },\n contentInput: {\n placeholder: 'Your question',\n },\n submit: {\n existingQuestion: 'Save',\n newQuestion: 'Post',\n },\n },\n answerForm: {\n errorPosting: 'Could not post answer',\n contentInput: {\n placeholder: 'Your answer',\n },\n submit: {\n existingAnswer: 'Save',\n newAnswer: 'Post',\n },\n },\n entitiesInput: {\n label: 'Entities',\n placeholder: 'Type or select entities',\n helperText: 'Add up to {{max}} entities this question relates to',\n },\n tagsInput: {\n label: 'Tags',\n placeholder: 'Type or select tags',\n helperText: 'Add up to {{max}} tags to categorize your question',\n },\n askPage: {\n title: {\n existingQuestion: 'Edit question',\n entityQuestion: 'Ask a question about {{entity}}',\n newQuestion: 'Ask question',\n },\n },\n askQuestionButton: {\n title: 'Ask question',\n },\n backToQuestionsButton: {\n title: 'Back to questions',\n },\n commentList: {\n deleteLink: 'delete',\n },\n commentSection: {\n input: {\n placeholder: 'Your comment',\n },\n addComment: 'Add comment',\n post: 'Post',\n },\n deleteModal: {\n title: {\n question: 'Are you sure you want to delete this question?',\n answer: 'Are you sure you want to delete this answer?',\n },\n errorDeleting: 'Failed to delete',\n deleteButton: 'Delete',\n cancelButton: 'Cancel',\n },\n favoritePage: {\n title: 'Your favorite questions',\n },\n homePage: {\n moreMenu: {\n title: 'More',\n profile: 'Profile',\n tags: 'Tags',\n favoriteQuestions: 'Favorite questions',\n statistics: 'Statistics',\n },\n title: 'All questions',\n highlights: {\n loadError: 'Failed to load questions',\n hot: {\n title: 'Hot questions',\n noQuestionsLabel: 'No questions',\n },\n unanswered: {\n title: 'Unanswered questions',\n noQuestionsLabel: 'No unanswered questions',\n },\n incorrect: {\n title: 'Questions without correct answer',\n noQuestionsLabel: 'No questions without correct answers',\n },\n },\n },\n userLink: {\n anonymous: 'Anonymous',\n },\n questionPage: {\n errorLoading: 'Could not load question',\n editButton: 'Edit',\n sortAnswers: {\n label: 'Sort answers',\n default: 'Default',\n createdDesc: 'Created (desc)',\n createdAsc: 'Created (asc)',\n scoreDesc: 'Score (desc)',\n scoreAsc: 'Score (asc)',\n commentsDesc: 'Comments (desc)',\n commentsAsc: 'Comments (asc)',\n authorDesc: 'Author (desc)',\n authorAsc: 'Author (asc)',\n updatedDesc: 'Updated (desc)',\n updatedAsc: 'Updated (asc)',\n },\n },\n authorBox: {\n askedAtTime: 'asked',\n postedAtTime: 'Posted',\n updatedAtTime: 'Updated',\n updatedBy: 'by',\n },\n favorite: {\n remove: 'Remove this question from favorites',\n add: 'Mark this question as favorite',\n },\n link: {\n question: 'Copy link to this question to clipboard',\n answer: 'Copy link to this answer to clipboard',\n aria: 'Copy link to clipboard',\n },\n voteButtons: {\n answer: {\n markCorrect: 'Mark this answer correct',\n markIncorrect: 'Mark this answer incorrect',\n marked: 'This answer has been marked as correct',\n good: 'This answer is good',\n bad: 'This answer is not good',\n own: 'You cannot vote your own answer',\n },\n question: {\n good: 'This question is good',\n bad: 'This question is not good',\n own: 'You cannot vote your own question',\n },\n },\n datePicker: {\n from: 'From date',\n to: 'To date',\n invalidRange:\n \"Date range invalid, 'To date' should be greater than 'From date'\",\n range: {\n label: 'Date range',\n default: 'Select',\n last7days: 'Last 7 days',\n last30days: 'Last 30 days',\n custom: 'Custom',\n },\n },\n filterPanel: {\n filterButton: 'Filter',\n noAnswers: {\n label: 'No answers',\n },\n noCorrectAnswers: {\n label: 'No correct answers',\n },\n noVotes: {\n label: 'No votes',\n },\n orderBy: {\n label: 'Order by',\n created: 'Created',\n views: 'Views',\n score: 'Score',\n answers: 'Answers',\n updated: 'Updated',\n },\n order: {\n label: 'Order',\n asc: 'Ascending',\n desc: 'Descending',\n },\n filters: {\n label: 'Filters',\n entity: {\n label: 'Entity',\n placeholder: 'Type or select entity',\n },\n tag: {\n label: 'Tag',\n placeholder: 'Type or select tag',\n },\n },\n },\n questionList: {\n errorLoading: 'Could not load questions',\n questionsPerPage: 'Questions per page',\n },\n questionsContainer: {\n title: {\n questionsBy: 'Questions by',\n questionsAbout: 'Questions about',\n questionsTagged: `Questions tagged with {{tags}}`,\n favorite: 'Your favorite questions',\n },\n search: {\n label: 'Search for questions',\n placeholder: 'Search...',\n },\n noQuestions: 'No questions found',\n askOneButton: 'Go ahead and ask one!',\n },\n questionsTable: {\n errorLoading: 'Could not load questions',\n latest: 'Latest',\n mostViewed: 'Most viewed',\n favorites: 'Favorites',\n cells: {\n title: 'Title',\n author: 'Author',\n asked: 'Asked',\n updated: 'Last updated',\n },\n },\n statistics: {\n errorLoading: 'Could not load statistics',\n notAvailable: 'Statistics are unavailable',\n ranking: 'Ranking Q&A 🏆',\n mostQuestions: {\n title: 'Most questions',\n description: 'People who have posted most questions',\n },\n mostAnswers: {\n title: 'Most answers',\n description: 'People who have posted most answers',\n },\n topVotedQuestions: {\n title: 'Top voted questions',\n description: 'People who have the highest rated questions',\n },\n topVotedAnswers: {\n title: 'Top voted answers',\n description: 'People who have the highest rated answers',\n },\n topVotedCorrectAnswers: {\n title: 'Top voted correct answers',\n description: 'People who have the highest rated correct answers',\n },\n },\n tagPage: {\n errorLoading: 'Could not load tags',\n taggedWithTitle: 'Questions tagged with {{tag}}',\n defaultTitle: 'Tags',\n search: {\n label: 'Search tag',\n placeholder: 'Search...',\n },\n tags_zero: 'No tags',\n tags_one: 'Showing {{count}} tag',\n tags_other: 'Showing {{count}} tags',\n },\n userPage: {\n profileTab: 'Profile',\n questions: 'Questions',\n answers: 'Answers',\n },\n },\n});\n\nexport const qetaTranslations = createTranslationResource({\n ref: qetaTranslationRef,\n translations: {\n fi: () => import('./locale/fi'),\n },\n});\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"translation.esm.js","sources":["../src/translation.ts"],"sourcesContent":["import {\n createTranslationRef,\n createTranslationResource,\n} from '@backstage/core-plugin-api/alpha';\n\n/** @alpha */\nexport const qetaTranslationRef = createTranslationRef({\n id: 'qeta',\n messages: {\n pluginName: 'Q&A',\n answerList: {\n errorLoading: 'Could not load answers',\n noAnswers: 'No answers',\n limitSelect: 'Answers per page',\n },\n common: {\n score: '{{score}} score',\n anonymousAuthor: 'Anonymous',\n answers_zero: 'No answers',\n answers_one: '{{count}} answer',\n answers_other: '{{count}} answers',\n views_zero: 'Viewed {{count}} times',\n views_one: 'Viewed {{count}} time',\n views_other: 'Viewed {{count}} times',\n viewsShort_zero: '0 views',\n viewsShort_one: '{{count}} view',\n viewsShort_other: '{{count}} views',\n questions_zero: 'No questions',\n questions_one: '{{count}} question',\n questions_other: '{{count}} questions',\n },\n answer: {\n questionTitle: 'Q: {{question}}',\n answeredTime: 'answered',\n },\n answerContainer: {\n title: {\n answersBy: 'Answers by',\n answersAbout: 'Answers about',\n answersTagged: `Answers tagged with {{tags}}`,\n },\n search: {\n label: 'Search for answers',\n placeholder: 'Search...',\n },\n },\n anonymousCheckbox: {\n tooltip:\n \"By enabling this, other users won't be able to see you as an author\",\n answerAnonymously: 'Answer anonymously',\n askAnonymously: 'Ask anonymously',\n },\n askForm: {\n errorPosting: 'Could not post question',\n titleInput: {\n label: 'Title',\n helperText:\n 'Write good title for your question that people can understand',\n },\n contentInput: {\n placeholder: 'Your question',\n },\n submit: {\n existingQuestion: 'Save',\n newQuestion: 'Post',\n },\n },\n answerForm: {\n errorPosting: 'Could not post answer',\n contentInput: {\n placeholder: 'Your answer',\n },\n submit: {\n existingAnswer: 'Save',\n newAnswer: 'Post',\n },\n },\n entitiesInput: {\n label: 'Entities',\n placeholder: 'Type or select entities',\n helperText: 'Add up to {{max}} entities this question relates to',\n },\n tagsInput: {\n label: 'Tags',\n placeholder: 'Type or select tags',\n helperText: 'Add up to {{max}} tags to categorize your question',\n },\n askPage: {\n title: {\n existingQuestion: 'Edit question',\n entityQuestion: 'Ask a question about {{entity}}',\n newQuestion: 'Ask question',\n },\n },\n askQuestionButton: {\n title: 'Ask question',\n },\n backToQuestionsButton: {\n title: 'Back to questions',\n },\n commentList: {\n deleteLink: 'delete',\n },\n commentSection: {\n input: {\n placeholder: 'Your comment',\n },\n addComment: 'Add comment',\n post: 'Post',\n },\n deleteModal: {\n title: {\n question: 'Are you sure you want to delete this question?',\n answer: 'Are you sure you want to delete this answer?',\n },\n errorDeleting: 'Failed to delete',\n deleteButton: 'Delete',\n cancelButton: 'Cancel',\n },\n favoritePage: {\n title: 'Your favorite questions',\n },\n homePage: {\n moreMenu: {\n title: 'More',\n profile: 'Profile',\n tags: 'Tags',\n favoriteQuestions: 'Favorite questions',\n statistics: 'Statistics',\n },\n title: 'All questions',\n followedTags: 'Followed tags',\n highlights: {\n loadError: 'Failed to load questions',\n hot: {\n title: 'Hot questions',\n noQuestionsLabel: 'No questions',\n },\n unanswered: {\n title: 'Unanswered questions',\n noQuestionsLabel: 'No unanswered questions',\n },\n incorrect: {\n title: 'Questions without correct answer',\n noQuestionsLabel: 'No questions without correct answers',\n },\n },\n },\n userLink: {\n anonymous: 'Anonymous',\n },\n questionPage: {\n errorLoading: 'Could not load question',\n editButton: 'Edit',\n sortAnswers: {\n label: 'Sort answers',\n default: 'Default',\n createdDesc: 'Created (desc)',\n createdAsc: 'Created (asc)',\n scoreDesc: 'Score (desc)',\n scoreAsc: 'Score (asc)',\n commentsDesc: 'Comments (desc)',\n commentsAsc: 'Comments (asc)',\n authorDesc: 'Author (desc)',\n authorAsc: 'Author (asc)',\n updatedDesc: 'Updated (desc)',\n updatedAsc: 'Updated (asc)',\n },\n },\n authorBox: {\n askedAtTime: 'asked',\n postedAtTime: 'Posted',\n updatedAtTime: 'Updated',\n updatedBy: 'by',\n },\n favorite: {\n remove: 'Remove this question from favorites',\n add: 'Mark this question as favorite',\n },\n link: {\n question: 'Copy link to this question to clipboard',\n answer: 'Copy link to this answer to clipboard',\n aria: 'Copy link to clipboard',\n },\n voteButtons: {\n answer: {\n markCorrect: 'Mark this answer correct',\n markIncorrect: 'Mark this answer incorrect',\n marked: 'This answer has been marked as correct',\n good: 'This answer is good',\n bad: 'This answer is not good',\n own: 'You cannot vote your own answer',\n },\n question: {\n good: 'This question is good',\n bad: 'This question is not good',\n own: 'You cannot vote your own question',\n },\n },\n datePicker: {\n from: 'From date',\n to: 'To date',\n invalidRange:\n \"Date range invalid, 'To date' should be greater than 'From date'\",\n range: {\n label: 'Date range',\n default: 'Select',\n last7days: 'Last 7 days',\n last30days: 'Last 30 days',\n custom: 'Custom',\n },\n },\n filterPanel: {\n filterButton: 'Filter',\n noAnswers: {\n label: 'No answers',\n },\n noCorrectAnswers: {\n label: 'No correct answers',\n },\n noVotes: {\n label: 'No votes',\n },\n orderBy: {\n label: 'Order by',\n created: 'Created',\n views: 'Views',\n score: 'Score',\n answers: 'Answers',\n updated: 'Updated',\n },\n order: {\n label: 'Order',\n asc: 'Ascending',\n desc: 'Descending',\n },\n filters: {\n label: 'Filters',\n entity: {\n label: 'Entity',\n placeholder: 'Type or select entity',\n },\n tag: {\n label: 'Tag',\n placeholder: 'Type or select tag',\n },\n },\n },\n questionList: {\n errorLoading: 'Could not load questions',\n questionsPerPage: 'Questions per page',\n },\n questionsContainer: {\n title: {\n questionsBy: 'Questions by',\n questionsAbout: 'Questions about',\n questionsTagged: `Questions tagged with {{tags}}`,\n favorite: 'Your favorite questions',\n },\n search: {\n label: 'Search for questions',\n placeholder: 'Search...',\n },\n noQuestions: 'No questions found',\n askOneButton: 'Go ahead and ask one!',\n },\n questionsTable: {\n errorLoading: 'Could not load questions',\n latest: 'Latest',\n mostViewed: 'Most viewed',\n favorites: 'Favorites',\n cells: {\n title: 'Title',\n author: 'Author',\n asked: 'Asked',\n updated: 'Last updated',\n },\n },\n statistics: {\n errorLoading: 'Could not load statistics',\n notAvailable: 'Statistics are unavailable',\n ranking: 'Ranking Q&A 🏆',\n mostQuestions: {\n title: 'Most questions',\n description: 'People who have posted most questions',\n },\n mostAnswers: {\n title: 'Most answers',\n description: 'People who have posted most answers',\n },\n topVotedQuestions: {\n title: 'Top voted questions',\n description: 'People who have the highest rated questions',\n },\n topVotedAnswers: {\n title: 'Top voted answers',\n description: 'People who have the highest rated answers',\n },\n topVotedCorrectAnswers: {\n title: 'Top voted correct answers',\n description: 'People who have the highest rated correct answers',\n },\n },\n tagPage: {\n errorLoading: 'Could not load tags',\n taggedWithTitle: 'Questions tagged with {{tag}}',\n defaultTitle: 'Tags',\n search: {\n label: 'Search tag',\n placeholder: 'Search...',\n },\n tags_zero: 'No tags',\n tags_one: 'Showing {{count}} tag',\n tags_other: 'Showing {{count}} tags',\n },\n userPage: {\n profileTab: 'Profile',\n questions: 'Questions',\n answers: 'Answers',\n },\n tagButton: {\n follow: 'Follow tag',\n unfollow: 'Unfollow tag',\n tooltip:\n 'By following a tag, you will get notified when ever a new question with that tag is posted',\n },\n },\n});\n\nexport const qetaTranslations = createTranslationResource({\n ref: qetaTranslationRef,\n translations: {\n fi: () => import('./locale/fi'),\n },\n});\n"],"names":[],"mappings":"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"}
|
package/dist/utils/hooks.esm.js
CHANGED
|
@@ -5,7 +5,7 @@ import { makeStyles } from '@material-ui/core';
|
|
|
5
5
|
import { catalogApiRef, useEntityPresentation } from '@backstage/plugin-catalog-react';
|
|
6
6
|
import { trimEnd } from 'lodash';
|
|
7
7
|
import { useSearchParams } from 'react-router-dom';
|
|
8
|
-
import React, { useEffect } from 'react';
|
|
8
|
+
import React, { useEffect, useCallback } from 'react';
|
|
9
9
|
import DataLoader from 'dataloader';
|
|
10
10
|
import { useTranslationRef } from '@backstage/core-plugin-api/alpha';
|
|
11
11
|
import { qetaTranslationRef } from '../translation.esm.js';
|
|
@@ -160,7 +160,7 @@ const useStyles = makeStyles((theme) => {
|
|
|
160
160
|
questionsPerPage: {
|
|
161
161
|
marginRight: theme.spacing(3)
|
|
162
162
|
},
|
|
163
|
-
|
|
163
|
+
questionHighlightListContainer: {
|
|
164
164
|
width: "100%",
|
|
165
165
|
border: `1px solid ${theme.palette.action.selected}`,
|
|
166
166
|
borderRadius: theme.shape.borderRadius,
|
|
@@ -168,6 +168,9 @@ const useStyles = makeStyles((theme) => {
|
|
|
168
168
|
marginTop: theme.spacing(2)
|
|
169
169
|
}
|
|
170
170
|
},
|
|
171
|
+
questionHighlightList: {
|
|
172
|
+
paddingBottom: "0px"
|
|
173
|
+
},
|
|
171
174
|
filterPanel: {
|
|
172
175
|
border: `1px solid ${theme.palette.action.selected}`,
|
|
173
176
|
borderRadius: theme.shape.borderRadius,
|
|
@@ -244,10 +247,16 @@ const useBasePath = () => {
|
|
|
244
247
|
return trimEnd(pathname, "/");
|
|
245
248
|
};
|
|
246
249
|
const userCache = /* @__PURE__ */ new Map();
|
|
247
|
-
const
|
|
250
|
+
const dataLoaderFactory = (catalogApi) => new DataLoader(
|
|
248
251
|
async (entityRefs) => {
|
|
249
|
-
const catalogApi = useApi(catalogApiRef);
|
|
250
252
|
const { items } = await catalogApi.getEntitiesByRefs({
|
|
253
|
+
fields: [
|
|
254
|
+
"kind",
|
|
255
|
+
"metadata.name",
|
|
256
|
+
"metadata.namespace",
|
|
257
|
+
"spec.profile.displayName",
|
|
258
|
+
"spec.profile.picture"
|
|
259
|
+
],
|
|
251
260
|
entityRefs
|
|
252
261
|
});
|
|
253
262
|
entityRefs.forEach((entityRef, index) => {
|
|
@@ -285,7 +294,7 @@ const useEntityAuthor = (entity) => {
|
|
|
285
294
|
setUser(userCache.get(author));
|
|
286
295
|
return;
|
|
287
296
|
}
|
|
288
|
-
|
|
297
|
+
dataLoaderFactory(catalogApi).load(author).then((data) => {
|
|
289
298
|
if (data) {
|
|
290
299
|
setUser(data);
|
|
291
300
|
} else {
|
|
@@ -316,9 +325,39 @@ const useEntityAuthor = (entity) => {
|
|
|
316
325
|
}, [name]);
|
|
317
326
|
return { name, initials, user };
|
|
318
327
|
};
|
|
328
|
+
const useTagsFollow = () => {
|
|
329
|
+
const [tags, setTags] = React.useState([]);
|
|
330
|
+
const qetaApi = useApi(qetaApiRef);
|
|
331
|
+
useEffect(() => {
|
|
332
|
+
qetaApi.getFollowedTags().then((res) => {
|
|
333
|
+
setTags(res.tags);
|
|
334
|
+
});
|
|
335
|
+
}, [qetaApi]);
|
|
336
|
+
const followTag = useCallback(
|
|
337
|
+
(tag) => {
|
|
338
|
+
qetaApi.followTag(tag).then(() => {
|
|
339
|
+
setTags((prev) => [...prev, tag]);
|
|
340
|
+
});
|
|
341
|
+
},
|
|
342
|
+
[qetaApi]
|
|
343
|
+
);
|
|
344
|
+
const unfollowTag = useCallback(
|
|
345
|
+
(tag) => {
|
|
346
|
+
qetaApi.unfollowTag(tag).then(() => {
|
|
347
|
+
setTags((prev) => prev.filter((t) => t !== tag));
|
|
348
|
+
});
|
|
349
|
+
},
|
|
350
|
+
[qetaApi]
|
|
351
|
+
);
|
|
352
|
+
const isFollowingTag = useCallback(
|
|
353
|
+
(tag) => tags.includes(tag),
|
|
354
|
+
[tags]
|
|
355
|
+
);
|
|
356
|
+
return { tags, followTag, unfollowTag, isFollowingTag };
|
|
357
|
+
};
|
|
319
358
|
const useTranslation = () => {
|
|
320
359
|
return useTranslationRef(qetaTranslationRef);
|
|
321
360
|
};
|
|
322
361
|
|
|
323
|
-
export { useBasePath, useBaseUrl, useEntityAuthor, useEntityQueryParameter, useIdentityApi, useQetaApi, useStyles, useTranslation };
|
|
362
|
+
export { useBasePath, useBaseUrl, useEntityAuthor, useEntityQueryParameter, useIdentityApi, useQetaApi, useStyles, useTagsFollow, useTranslation };
|
|
324
363
|
//# sourceMappingURL=hooks.esm.js.map
|