@drodil/backstage-plugin-qeta 2.10.2 → 2.11.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 +5 -2
- package/dist/api/QetaClient.esm.js.map +1 -1
- package/dist/components/AskPage/AskPage.esm.js +2 -3
- package/dist/components/AskPage/AskPage.esm.js.map +1 -1
- package/dist/components/Buttons/BackToQuestionsButton.esm.js +6 -6
- package/dist/components/Buttons/BackToQuestionsButton.esm.js.map +1 -1
- package/dist/components/Buttons/EntityFollowButton.esm.js +4 -1
- package/dist/components/Buttons/EntityFollowButton.esm.js.map +1 -1
- package/dist/components/Buttons/TagFollowButton.esm.js +5 -3
- package/dist/components/Buttons/TagFollowButton.esm.js.map +1 -1
- package/dist/components/FavoritePage/FavoritePage.esm.js +30 -4
- package/dist/components/FavoritePage/FavoritePage.esm.js.map +1 -1
- package/dist/components/HomePage/HomePage.esm.js +20 -136
- package/dist/components/HomePage/HomePage.esm.js.map +1 -1
- package/dist/components/HomePageCards/QuestionsCard.esm.js +21 -0
- package/dist/components/HomePageCards/QuestionsCard.esm.js.map +1 -0
- package/dist/components/LeftMenu/LeftMenu.esm.js +54 -0
- package/dist/components/LeftMenu/LeftMenu.esm.js.map +1 -0
- package/dist/components/{HomePage → QetaPage}/FollowedEntitiesList.esm.js +2 -2
- package/dist/components/QetaPage/FollowedEntitiesList.esm.js.map +1 -0
- package/dist/components/{HomePage → QetaPage}/FollowedTagsList.esm.js +2 -2
- package/dist/components/QetaPage/FollowedTagsList.esm.js.map +1 -0
- package/dist/components/QetaPage/QetaPage.esm.js +79 -0
- package/dist/components/QetaPage/QetaPage.esm.js.map +1 -0
- package/dist/components/QetaPage/index.esm.js +2 -0
- package/dist/components/QuestionHighlightList/QuestionHighlightList.esm.js +8 -5
- package/dist/components/QuestionHighlightList/QuestionHighlightList.esm.js.map +1 -1
- package/dist/components/QuestionPage/AnswerCard.esm.js +46 -34
- package/dist/components/QuestionPage/AnswerCard.esm.js.map +1 -1
- package/dist/components/QuestionPage/QuestionCard.esm.js +6 -4
- package/dist/components/QuestionPage/QuestionCard.esm.js.map +1 -1
- package/dist/components/QuestionPage/QuestionPage.esm.js +4 -4
- package/dist/components/QuestionPage/QuestionPage.esm.js.map +1 -1
- package/dist/components/QuestionPage/VoteButtons.esm.js +5 -1
- package/dist/components/QuestionPage/VoteButtons.esm.js.map +1 -1
- package/dist/components/QuestionsContainer/QuestionList.esm.js +3 -3
- package/dist/components/QuestionsContainer/QuestionList.esm.js.map +1 -1
- package/dist/components/QuestionsContainer/QuestionListItem.esm.js +77 -75
- package/dist/components/QuestionsContainer/QuestionListItem.esm.js.map +1 -1
- package/dist/components/QuestionsPage/QuestionsPage.esm.js +54 -0
- package/dist/components/QuestionsPage/QuestionsPage.esm.js.map +1 -0
- package/dist/components/Statistics/StatisticsPage.esm.js +2 -4
- package/dist/components/Statistics/StatisticsPage.esm.js.map +1 -1
- package/dist/components/Statistics/TopRankingUsersCard.esm.js +4 -2
- package/dist/components/Statistics/TopRankingUsersCard.esm.js.map +1 -1
- package/dist/components/Statistics/styles.esm.js +3 -3
- package/dist/components/Statistics/styles.esm.js.map +1 -1
- package/dist/components/TagPage/TagPage.esm.js +32 -6
- package/dist/components/TagPage/TagPage.esm.js.map +1 -1
- package/dist/components/UserPage/UserPage.esm.js +4 -5
- package/dist/components/UserPage/UserPage.esm.js.map +1 -1
- package/dist/index.d.ts +43 -37
- package/dist/locale/fi.esm.js +18 -16
- package/dist/locale/fi.esm.js.map +1 -1
- package/dist/plugin.esm.js +1 -1
- package/dist/plugin.esm.js.map +1 -1
- package/dist/translation.esm.js +36 -26
- package/dist/translation.esm.js.map +1 -1
- package/dist/utils/hooks.esm.js +37 -10
- package/dist/utils/hooks.esm.js.map +1 -1
- package/package.json +17 -17
- package/dist/components/HomePage/FollowedEntitiesList.esm.js.map +0 -1
- package/dist/components/HomePage/FollowedTagsList.esm.js.map +0 -1
- package/dist/components/HomePage/index.esm.js +0 -2
- /package/dist/components/{HomePage → QetaPage}/index.esm.js.map +0 -0
|
@@ -39,8 +39,8 @@ class QetaClient {
|
|
|
39
39
|
}
|
|
40
40
|
return data;
|
|
41
41
|
}
|
|
42
|
-
async getQuestionsList(type) {
|
|
43
|
-
const query =
|
|
42
|
+
async getQuestionsList(type, options) {
|
|
43
|
+
const query = this.getQueryParameters(options).toString();
|
|
44
44
|
let url = `${await this.getBaseUrl()}/questions/list/${type}`;
|
|
45
45
|
if (query) {
|
|
46
46
|
url += `?${query}`;
|
|
@@ -473,6 +473,9 @@ class QetaClient {
|
|
|
473
473
|
return response;
|
|
474
474
|
}
|
|
475
475
|
getQueryParameters(params) {
|
|
476
|
+
if (!params) {
|
|
477
|
+
return new URLSearchParams();
|
|
478
|
+
}
|
|
476
479
|
const asStrings = Object.fromEntries(
|
|
477
480
|
Object.entries(params).map(([k, v]) => {
|
|
478
481
|
if (!v) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"QetaClient.esm.js","sources":["../../src/api/QetaClient.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { GetAnswersOptions, GetQuestionsOptions, QetaApi } from './QetaApi';\nimport {\n createApiRef,\n DiscoveryApi,\n FetchApi,\n} from '@backstage/core-plugin-api';\nimport { CustomErrorBase } from '@backstage/errors';\nimport {\n Answer,\n AnswerRequest,\n AnswerResponseBody,\n AnswersResponse,\n AnswersResponseBody,\n AttachmentResponseBody,\n EntityResponse,\n Question,\n QuestionRequest,\n QuestionResponseBody,\n QuestionsResponse,\n QuestionsResponseBody,\n StatisticResponse,\n StatisticsRequestParameters,\n TagResponse,\n UserEntitiesResponse,\n UserTagsResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport omitBy from 'lodash/omitBy';\nimport isEmpty from 'lodash/isEmpty';\n\nexport const qetaApiRef = createApiRef<QetaApi>({\n id: 'plugin.qeta.service',\n});\n\nexport class QetaError extends CustomErrorBase {\n public errors: null | undefined | any[];\n\n constructor(message: string, errors: null | undefined | any[]) {\n super(message);\n\n this.errors = errors;\n }\n}\n\nexport class QetaClient implements QetaApi {\n private readonly fetchApi: FetchApi;\n private readonly discoveryApi: DiscoveryApi;\n\n constructor(options: { fetchApi: FetchApi; discoveryApi: DiscoveryApi }) {\n this.fetchApi = options.fetchApi;\n this.discoveryApi = options.discoveryApi;\n }\n\n async getBaseUrl(): Promise<string> {\n return this.discoveryApi.getBaseUrl('qeta');\n }\n\n async getQuestions(options: GetQuestionsOptions): Promise<QuestionsResponse> {\n const query = this.getQueryParameters(options).toString();\n\n let url = `${await this.getBaseUrl()}/questions`;\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n if (response.status === 403) {\n return { questions: [], total: 0 };\n }\n const data = (await response.json()) as QuestionsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getQuestionsList(type: string): Promise<QuestionsResponse> {\n const query = new URLSearchParams({ limit: '7' }).toString();\n\n let url = `${await this.getBaseUrl()}/questions/list/${type}`;\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n if (response.status === 403) {\n return { questions: [], total: 0 };\n }\n\n const data = (await response.json()) as QuestionsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async postQuestion(question: QuestionRequest): Promise<Question> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions`,\n {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async commentQuestion(id: number, content: string): Promise<Question> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${id}/comments`,\n {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async deleteQuestionComment(\n questionId: number,\n id: number,\n ): Promise<Question> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/comments/${id}`,\n {\n method: 'DELETE',\n },\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getQuestion(id?: string): Promise<Question> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${id}`,\n );\n\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getTags(): Promise<TagResponse[]> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/tags`,\n );\n return (await response.json()) as TagResponse[];\n }\n\n async getEntities(): Promise<EntityResponse[]> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/entities`,\n );\n return (await response.json()) as EntityResponse[];\n }\n\n async voteQuestionUp(id: number): Promise<Question> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${id}/upvote`,\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async voteQuestionDown(id: number): Promise<Question> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${id}/downvote`,\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async favoriteQuestion(id: number): Promise<Question> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${id}/favorite`,\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async unfavoriteQuestion(id: number): Promise<Question> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${id}/unfavorite`,\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async postAnswer(answer: AnswerRequest): Promise<AnswerResponseBody> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${answer.questionId}/answers`,\n {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n anonymous: answer.anonymous,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async commentAnswer(\n questionId: number,\n id: number,\n content: string,\n ): Promise<Answer> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${id}/comments`,\n {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n ): Promise<Answer> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${answerId}/comments/${id}`,\n {\n method: 'DELETE',\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerUp(questionId: number, id: number): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${id}/upvote`,\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerDown(questionId: number, id: number): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${id}/downvote`,\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async markAnswerCorrect(questionId: number, id: number): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${id}/correct`,\n );\n const data = await response;\n return data.ok;\n }\n\n async markAnswerIncorrect(questionId: number, id: number): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${id}/incorrect`,\n );\n const data = await response;\n return data.ok;\n }\n\n async deleteQuestion(questionId: number): Promise<boolean> {\n if (!questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}`,\n {\n method: 'DELETE',\n },\n );\n const data = await response;\n return data.ok;\n }\n\n async deleteAnswer(questionId: number, id: number): Promise<boolean> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${id}`,\n {\n method: 'DELETE',\n },\n );\n const data = await response;\n return data.ok;\n }\n\n async updateQuestion(\n id: string,\n question: QuestionRequest,\n ): Promise<Question> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${id}`,\n {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update', data.errors);\n }\n\n return data;\n }\n\n async updateAnswer(\n id: number,\n answer: AnswerRequest,\n ): Promise<AnswerResponseBody> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${answer.questionId}/answers/${id}`,\n {\n method: 'POST',\n body: JSON.stringify({ answer: answer.answer, images: answer.images }),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getAnswers(options: GetAnswersOptions): Promise<AnswersResponse> {\n const query = this.getQueryParameters(options).toString();\n\n let url = `${await this.getBaseUrl()}/answers`;\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n if (response.status === 403) {\n return { answers: [], total: 0 };\n }\n const data = (await response.json()) as AnswersResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getAnswer(\n questionId: string | number | undefined,\n id: string | number | undefined,\n ): Promise<AnswerResponseBody> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${id}`,\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getFollowedTags(): Promise<UserTagsResponse> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/tags/followed`,\n );\n return (await response.json()) as UserTagsResponse;\n }\n\n async followTag(tag: string): Promise<boolean> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/tags/follow/${tag}`,\n {\n method: 'PUT',\n },\n );\n return response.ok;\n }\n\n async unfollowTag(tag: string): Promise<boolean> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/tags/follow/${tag}`,\n {\n method: 'DELETE',\n },\n );\n return response.ok;\n }\n\n async getFollowedEntities(): Promise<UserEntitiesResponse> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/entities/followed`,\n );\n return (await response.json()) as UserEntitiesResponse;\n }\n\n async followEntity(entityRef: string): Promise<boolean> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/entities/follow/${entityRef}`,\n {\n method: 'PUT',\n },\n );\n return response.ok;\n }\n\n async unfollowEntity(entityRef: string): Promise<boolean> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/entities/follow/${entityRef}`,\n {\n method: 'DELETE',\n },\n );\n return response.ok;\n }\n\n async postAttachment(file: Blob): Promise<AttachmentResponseBody> {\n const qetaUrl = `${await this.getBaseUrl()}/attachments`;\n const formData = new FormData();\n\n formData.append('image', file);\n\n const requestOptions = {\n method: 'POST',\n body: formData,\n };\n\n const response = await this.fetchApi.fetch(qetaUrl, requestOptions);\n return (await response.json()) as AttachmentResponseBody;\n }\n\n async getMostUpvotedAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const query = this.getQueryParameters(options.options).toString();\n\n let url = `${await this.getBaseUrl()}/statistics/answers/top-upvoted-users`;\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n\n const data = (await response.json()) as StatisticResponse;\n\n return data;\n }\n\n async getMostUpvotedCorrectAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const query = this.getQueryParameters(options.options).toString();\n let url = `${await this.getBaseUrl()}/statistics/answers/top-correct-upvoted-users`;\n\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n\n const data = (await response.json()) as StatisticResponse;\n\n return data;\n }\n\n async getMostUpvotedQuestions(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const query = this.getQueryParameters(options.options).toString();\n let url = `${await this.getBaseUrl()}/statistics/questions/top-upvoted-users`;\n\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n\n const data = (await response.json()) as StatisticResponse;\n\n return data;\n }\n\n async getMostQuestions(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const query = this.getQueryParameters(options.options).toString();\n let url = `${await this.getBaseUrl()}/statistics/questions/most-questions`;\n\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n\n const data = (await response.json()) as StatisticResponse;\n\n return data;\n }\n\n async getMostAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const query = this.getQueryParameters(options.options).toString();\n let url = `${await this.getBaseUrl()}/statistics/answers/most-answers`;\n\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n\n const data = (await response.json()) as StatisticResponse;\n\n return data;\n }\n\n async getTopStatisticsHomepage(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse[]> {\n const response = await Promise.all([\n this.getMostQuestions(options),\n this.getMostAnswers(options),\n this.getMostUpvotedQuestions(options),\n this.getMostUpvotedAnswers(options),\n this.getMostUpvotedCorrectAnswers(options),\n ]);\n\n return response;\n }\n\n private getQueryParameters(params: any): URLSearchParams {\n const asStrings = Object.fromEntries(\n Object.entries(params).map(([k, v]) => {\n if (!v) {\n return [k, ''];\n }\n if (Array.isArray(v)) {\n return [k, v.join(',')];\n }\n return [k, `${v}`];\n }),\n );\n return new URLSearchParams(omitBy(asStrings, isEmpty));\n }\n}\n"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"QetaClient.esm.js","sources":["../../src/api/QetaClient.ts"],"sourcesContent":["/* eslint-disable no-console */\nimport { GetAnswersOptions, GetQuestionsOptions, QetaApi } from './QetaApi';\nimport {\n createApiRef,\n DiscoveryApi,\n FetchApi,\n} from '@backstage/core-plugin-api';\nimport { CustomErrorBase } from '@backstage/errors';\nimport {\n Answer,\n AnswerRequest,\n AnswerResponseBody,\n AnswersResponse,\n AnswersResponseBody,\n AttachmentResponseBody,\n EntityResponse,\n Question,\n QuestionRequest,\n QuestionResponseBody,\n QuestionsResponse,\n QuestionsResponseBody,\n StatisticResponse,\n StatisticsRequestParameters,\n TagResponse,\n UserEntitiesResponse,\n UserTagsResponse,\n} from '@drodil/backstage-plugin-qeta-common';\nimport omitBy from 'lodash/omitBy';\nimport isEmpty from 'lodash/isEmpty';\n\nexport const qetaApiRef = createApiRef<QetaApi>({\n id: 'plugin.qeta.service',\n});\n\nexport class QetaError extends CustomErrorBase {\n public errors: null | undefined | any[];\n\n constructor(message: string, errors: null | undefined | any[]) {\n super(message);\n\n this.errors = errors;\n }\n}\n\nexport class QetaClient implements QetaApi {\n private readonly fetchApi: FetchApi;\n private readonly discoveryApi: DiscoveryApi;\n\n constructor(options: { fetchApi: FetchApi; discoveryApi: DiscoveryApi }) {\n this.fetchApi = options.fetchApi;\n this.discoveryApi = options.discoveryApi;\n }\n\n async getBaseUrl(): Promise<string> {\n return this.discoveryApi.getBaseUrl('qeta');\n }\n\n async getQuestions(options: GetQuestionsOptions): Promise<QuestionsResponse> {\n const query = this.getQueryParameters(options).toString();\n\n let url = `${await this.getBaseUrl()}/questions`;\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n if (response.status === 403) {\n return { questions: [], total: 0 };\n }\n const data = (await response.json()) as QuestionsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getQuestionsList(\n type: string,\n options?: GetQuestionsOptions,\n ): Promise<QuestionsResponse> {\n const query = this.getQueryParameters(options).toString();\n\n let url = `${await this.getBaseUrl()}/questions/list/${type}`;\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n if (response.status === 403) {\n return { questions: [], total: 0 };\n }\n\n const data = (await response.json()) as QuestionsResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async postQuestion(question: QuestionRequest): Promise<Question> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions`,\n {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async commentQuestion(id: number, content: string): Promise<Question> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${id}/comments`,\n {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async deleteQuestionComment(\n questionId: number,\n id: number,\n ): Promise<Question> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/comments/${id}`,\n {\n method: 'DELETE',\n },\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getQuestion(id?: string): Promise<Question> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${id}`,\n );\n\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getTags(): Promise<TagResponse[]> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/tags`,\n );\n return (await response.json()) as TagResponse[];\n }\n\n async getEntities(): Promise<EntityResponse[]> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/entities`,\n );\n return (await response.json()) as EntityResponse[];\n }\n\n async voteQuestionUp(id: number): Promise<Question> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${id}/upvote`,\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async voteQuestionDown(id: number): Promise<Question> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${id}/downvote`,\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async favoriteQuestion(id: number): Promise<Question> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${id}/favorite`,\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async unfavoriteQuestion(id: number): Promise<Question> {\n if (!id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${id}/unfavorite`,\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async postAnswer(answer: AnswerRequest): Promise<AnswerResponseBody> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${answer.questionId}/answers`,\n {\n method: 'POST',\n body: JSON.stringify({\n answer: answer.answer,\n images: answer.images,\n anonymous: answer.anonymous,\n }),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async commentAnswer(\n questionId: number,\n id: number,\n content: string,\n ): Promise<Answer> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${id}/comments`,\n {\n method: 'POST',\n body: JSON.stringify({ content }),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async deleteAnswerComment(\n questionId: number,\n answerId: number,\n id: number,\n ): Promise<Answer> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${answerId}/comments/${id}`,\n {\n method: 'DELETE',\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerUp(questionId: number, id: number): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${id}/upvote`,\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async voteAnswerDown(questionId: number, id: number): Promise<Answer> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${id}/downvote`,\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async markAnswerCorrect(questionId: number, id: number): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${id}/correct`,\n );\n const data = await response;\n return data.ok;\n }\n\n async markAnswerIncorrect(questionId: number, id: number): Promise<boolean> {\n if (!id || !questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${id}/incorrect`,\n );\n const data = await response;\n return data.ok;\n }\n\n async deleteQuestion(questionId: number): Promise<boolean> {\n if (!questionId) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}`,\n {\n method: 'DELETE',\n },\n );\n const data = await response;\n return data.ok;\n }\n\n async deleteAnswer(questionId: number, id: number): Promise<boolean> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${id}`,\n {\n method: 'DELETE',\n },\n );\n const data = await response;\n return data.ok;\n }\n\n async updateQuestion(\n id: string,\n question: QuestionRequest,\n ): Promise<Question> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${id}`,\n {\n method: 'POST',\n body: JSON.stringify(question),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n const data = (await response.json()) as QuestionResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to update', data.errors);\n }\n\n return data;\n }\n\n async updateAnswer(\n id: number,\n answer: AnswerRequest,\n ): Promise<AnswerResponseBody> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${answer.questionId}/answers/${id}`,\n {\n method: 'POST',\n body: JSON.stringify({ answer: answer.answer, images: answer.images }),\n headers: { 'Content-Type': 'application/json' },\n },\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getAnswers(options: GetAnswersOptions): Promise<AnswersResponse> {\n const query = this.getQueryParameters(options).toString();\n\n let url = `${await this.getBaseUrl()}/answers`;\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n if (response.status === 403) {\n return { answers: [], total: 0 };\n }\n const data = (await response.json()) as AnswersResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getAnswer(\n questionId: string | number | undefined,\n id: string | number | undefined,\n ): Promise<AnswerResponseBody> {\n if (!questionId || !id) {\n throw new QetaError('Invalid id provided', undefined);\n }\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/questions/${questionId}/answers/${id}`,\n );\n const data = (await response.json()) as AnswerResponseBody;\n\n if ('errors' in data) {\n throw new QetaError('Failed to fetch', data.errors);\n }\n\n return data;\n }\n\n async getFollowedTags(): Promise<UserTagsResponse> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/tags/followed`,\n );\n return (await response.json()) as UserTagsResponse;\n }\n\n async followTag(tag: string): Promise<boolean> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/tags/follow/${tag}`,\n {\n method: 'PUT',\n },\n );\n return response.ok;\n }\n\n async unfollowTag(tag: string): Promise<boolean> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/tags/follow/${tag}`,\n {\n method: 'DELETE',\n },\n );\n return response.ok;\n }\n\n async getFollowedEntities(): Promise<UserEntitiesResponse> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/entities/followed`,\n );\n return (await response.json()) as UserEntitiesResponse;\n }\n\n async followEntity(entityRef: string): Promise<boolean> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/entities/follow/${entityRef}`,\n {\n method: 'PUT',\n },\n );\n return response.ok;\n }\n\n async unfollowEntity(entityRef: string): Promise<boolean> {\n const response = await this.fetchApi.fetch(\n `${await this.getBaseUrl()}/entities/follow/${entityRef}`,\n {\n method: 'DELETE',\n },\n );\n return response.ok;\n }\n\n async postAttachment(file: Blob): Promise<AttachmentResponseBody> {\n const qetaUrl = `${await this.getBaseUrl()}/attachments`;\n const formData = new FormData();\n\n formData.append('image', file);\n\n const requestOptions = {\n method: 'POST',\n body: formData,\n };\n\n const response = await this.fetchApi.fetch(qetaUrl, requestOptions);\n return (await response.json()) as AttachmentResponseBody;\n }\n\n async getMostUpvotedAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const query = this.getQueryParameters(options.options).toString();\n\n let url = `${await this.getBaseUrl()}/statistics/answers/top-upvoted-users`;\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n\n const data = (await response.json()) as StatisticResponse;\n\n return data;\n }\n\n async getMostUpvotedCorrectAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const query = this.getQueryParameters(options.options).toString();\n let url = `${await this.getBaseUrl()}/statistics/answers/top-correct-upvoted-users`;\n\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n\n const data = (await response.json()) as StatisticResponse;\n\n return data;\n }\n\n async getMostUpvotedQuestions(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const query = this.getQueryParameters(options.options).toString();\n let url = `${await this.getBaseUrl()}/statistics/questions/top-upvoted-users`;\n\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n\n const data = (await response.json()) as StatisticResponse;\n\n return data;\n }\n\n async getMostQuestions(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const query = this.getQueryParameters(options.options).toString();\n let url = `${await this.getBaseUrl()}/statistics/questions/most-questions`;\n\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n\n const data = (await response.json()) as StatisticResponse;\n\n return data;\n }\n\n async getMostAnswers(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse> {\n const query = this.getQueryParameters(options.options).toString();\n let url = `${await this.getBaseUrl()}/statistics/answers/most-answers`;\n\n if (query) {\n url += `?${query}`;\n }\n\n const response = await this.fetchApi.fetch(url);\n\n const data = (await response.json()) as StatisticResponse;\n\n return data;\n }\n\n async getTopStatisticsHomepage(\n options: StatisticsRequestParameters,\n ): Promise<StatisticResponse[]> {\n const response = await Promise.all([\n this.getMostQuestions(options),\n this.getMostAnswers(options),\n this.getMostUpvotedQuestions(options),\n this.getMostUpvotedAnswers(options),\n this.getMostUpvotedCorrectAnswers(options),\n ]);\n\n return response;\n }\n\n private getQueryParameters(params?: any): URLSearchParams {\n if (!params) {\n return new URLSearchParams();\n }\n const asStrings = Object.fromEntries(\n Object.entries(params).map(([k, v]) => {\n if (!v) {\n return [k, ''];\n }\n if (Array.isArray(v)) {\n return [k, v.join(',')];\n }\n return [k, `${v}`];\n }),\n );\n return new URLSearchParams(omitBy(asStrings, isEmpty));\n }\n}\n"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ContentHeader, InfoCard } from '@backstage/core-components';
|
|
2
2
|
import { Grid } from '@material-ui/core';
|
|
3
3
|
import React from 'react';
|
|
4
4
|
import { AskForm } from '../AskForm/AskForm.esm.js';
|
|
5
5
|
import { useParams, useSearchParams } from 'react-router-dom';
|
|
6
|
-
import { BackToQuestionsButton } from '../Buttons/BackToQuestionsButton.esm.js';
|
|
7
6
|
import { useEntityPresentation } from '@backstage/plugin-catalog-react';
|
|
8
7
|
import { filterTags } from '@drodil/backstage-plugin-qeta-common';
|
|
9
8
|
import { useTranslation } from '../../utils/hooks.esm.js';
|
|
@@ -26,7 +25,7 @@ const AskPage = () => {
|
|
|
26
25
|
} else {
|
|
27
26
|
title = t("askPage.title.newQuestion");
|
|
28
27
|
}
|
|
29
|
-
return /* @__PURE__ */ React.createElement(
|
|
28
|
+
return /* @__PURE__ */ React.createElement(React.Fragment, null, /* @__PURE__ */ React.createElement(ContentHeader, { title }), /* @__PURE__ */ React.createElement(Grid, { container: true, spacing: 3, direction: "column" }, /* @__PURE__ */ React.createElement(Grid, { item: true }, /* @__PURE__ */ React.createElement(InfoCard, null, /* @__PURE__ */ React.createElement(
|
|
30
29
|
AskForm,
|
|
31
30
|
{
|
|
32
31
|
id,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"AskPage.esm.js","sources":["../../../src/components/AskPage/AskPage.tsx"],"sourcesContent":["import {
|
|
1
|
+
{"version":3,"file":"AskPage.esm.js","sources":["../../../src/components/AskPage/AskPage.tsx"],"sourcesContent":["import { ContentHeader, InfoCard } from '@backstage/core-components';\nimport { Grid } from '@material-ui/core';\nimport React from 'react';\n\nimport { AskForm } from '../AskForm/AskForm';\nimport { useParams, useSearchParams } from 'react-router-dom';\nimport { useEntityPresentation } from '@backstage/plugin-catalog-react';\nimport { filterTags } from '@drodil/backstage-plugin-qeta-common';\nimport { useTranslation } from '../../utils/hooks';\n\nexport const AskPage = () => {\n const { id } = useParams();\n const [searchParams] = useSearchParams();\n const entity = searchParams.get('entity') ?? undefined;\n const entityPage = searchParams.get('entityPage') === 'true';\n const tags = filterTags(searchParams.get('tags'));\n const { t } = useTranslation();\n let title;\n if (id) {\n title = t('askPage.title.existingQuestion');\n } else if (entity) {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n const representation = useEntityPresentation(entity);\n title = t('askPage.title.entityQuestion', {\n entity: representation.primaryTitle,\n });\n } else {\n title = t('askPage.title.newQuestion');\n }\n\n return (\n <>\n <ContentHeader title={title} />\n <Grid container spacing={3} direction=\"column\">\n <Grid item>\n <InfoCard>\n <AskForm\n id={id}\n entity={entity}\n entityPage={entityPage}\n tags={tags}\n />\n </InfoCard>\n </Grid>\n </Grid>\n </>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AAUO,MAAM,UAAU,MAAM;AAC3B,EAAM,MAAA,EAAE,EAAG,EAAA,GAAI,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,CAAC,YAAY,CAAA,GAAI,eAAgB,EAAA,CAAA;AACvC,EAAA,MAAM,MAAS,GAAA,YAAA,CAAa,GAAI,CAAA,QAAQ,CAAK,IAAA,KAAA,CAAA,CAAA;AAC7C,EAAA,MAAM,UAAa,GAAA,YAAA,CAAa,GAAI,CAAA,YAAY,CAAM,KAAA,MAAA,CAAA;AACtD,EAAA,MAAM,IAAO,GAAA,UAAA,CAAW,YAAa,CAAA,GAAA,CAAI,MAAM,CAAC,CAAA,CAAA;AAChD,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAI,IAAA,KAAA,CAAA;AACJ,EAAA,IAAI,EAAI,EAAA;AACN,IAAA,KAAA,GAAQ,EAAE,gCAAgC,CAAA,CAAA;AAAA,aACjC,MAAQ,EAAA;AAEjB,IAAM,MAAA,cAAA,GAAiB,sBAAsB,MAAM,CAAA,CAAA;AACnD,IAAA,KAAA,GAAQ,EAAE,8BAAgC,EAAA;AAAA,MACxC,QAAQ,cAAe,CAAA,YAAA;AAAA,KACxB,CAAA,CAAA;AAAA,GACI,MAAA;AACL,IAAA,KAAA,GAAQ,EAAE,2BAA2B,CAAA,CAAA;AAAA,GACvC;AAEA,EAAA,iFAEK,KAAA,CAAA,aAAA,CAAA,aAAA,EAAA,EAAc,OAAc,CAC7B,kBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,SAAS,EAAA,IAAA,EAAC,OAAS,EAAA,CAAA,EAAG,WAAU,QACpC,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAA,sCACP,QACC,EAAA,IAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,OAAA;AAAA,IAAA;AAAA,MACC,EAAA;AAAA,MACA,MAAA;AAAA,MACA,UAAA;AAAA,MACA,IAAA;AAAA,KAAA;AAAA,GAEJ,CACF,CACF,CACF,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,19 +1,19 @@
|
|
|
1
1
|
import { LinkButton } from '@backstage/core-components';
|
|
2
|
-
import HomeOutlined from '@material-ui/icons/HomeOutlined';
|
|
3
2
|
import React from 'react';
|
|
4
3
|
import { useStyles, useTranslation } from '../../utils/hooks.esm.js';
|
|
5
4
|
import { useRouteRef } from '@backstage/core-plugin-api';
|
|
6
5
|
import { entityRouteRef } from '@backstage/plugin-catalog-react';
|
|
7
6
|
import { parseEntityRef } from '@backstage/catalog-model';
|
|
8
7
|
import { useSearchParams } from 'react-router-dom';
|
|
9
|
-
import {
|
|
8
|
+
import { questionsRouteRef } from '@drodil/backstage-plugin-qeta-react';
|
|
9
|
+
import ChevronLeft from '@material-ui/icons/ChevronLeft';
|
|
10
10
|
|
|
11
11
|
const BackToQuestionsButton = (props) => {
|
|
12
12
|
const styles = useStyles();
|
|
13
13
|
const entityRoute = useRouteRef(entityRouteRef);
|
|
14
|
-
const
|
|
14
|
+
const questionsRoute = useRouteRef(questionsRouteRef);
|
|
15
15
|
const { t } = useTranslation();
|
|
16
|
-
let to =
|
|
16
|
+
let to = questionsRoute();
|
|
17
17
|
const [searchParams] = useSearchParams();
|
|
18
18
|
const entity = searchParams.get("entity");
|
|
19
19
|
if (entity) {
|
|
@@ -21,7 +21,7 @@ const BackToQuestionsButton = (props) => {
|
|
|
21
21
|
if (props.entityPage) {
|
|
22
22
|
to = `${entityRoute(entityRef)}/qeta`;
|
|
23
23
|
} else {
|
|
24
|
-
to = `${
|
|
24
|
+
to = `${questionsRoute()}?entity=${entity}`;
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
return /* @__PURE__ */ React.createElement(
|
|
@@ -29,7 +29,7 @@ const BackToQuestionsButton = (props) => {
|
|
|
29
29
|
{
|
|
30
30
|
className: `${styles.marginRight} qetaBackToQuestionsBtn`,
|
|
31
31
|
to,
|
|
32
|
-
startIcon: /* @__PURE__ */ React.createElement(
|
|
32
|
+
startIcon: /* @__PURE__ */ React.createElement(ChevronLeft, null)
|
|
33
33
|
},
|
|
34
34
|
t("backToQuestionsButton.title")
|
|
35
35
|
);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"BackToQuestionsButton.esm.js","sources":["../../../src/components/Buttons/BackToQuestionsButton.tsx"],"sourcesContent":["import { LinkButton } from '@backstage/core-components';\nimport
|
|
1
|
+
{"version":3,"file":"BackToQuestionsButton.esm.js","sources":["../../../src/components/Buttons/BackToQuestionsButton.tsx"],"sourcesContent":["import { LinkButton } from '@backstage/core-components';\nimport React from 'react';\nimport { useStyles, useTranslation } from '../../utils/hooks';\nimport { useRouteRef } from '@backstage/core-plugin-api';\nimport { entityRouteRef } from '@backstage/plugin-catalog-react';\nimport { parseEntityRef } from '@backstage/catalog-model';\nimport { useSearchParams } from 'react-router-dom';\nimport { questionsRouteRef } from '@drodil/backstage-plugin-qeta-react';\nimport ChevronLeft from '@material-ui/icons/ChevronLeft';\n\nexport const BackToQuestionsButton = (props: { entityPage?: boolean }) => {\n const styles = useStyles();\n const entityRoute = useRouteRef(entityRouteRef);\n const questionsRoute = useRouteRef(questionsRouteRef);\n const { t } = useTranslation();\n\n let to = questionsRoute();\n const [searchParams] = useSearchParams();\n const entity = searchParams.get('entity');\n if (entity) {\n const entityRef = parseEntityRef(entity);\n if (props.entityPage) {\n to = `${entityRoute(entityRef)}/qeta`;\n } else {\n to = `${questionsRoute()}?entity=${entity}`;\n }\n }\n\n return (\n <LinkButton\n className={`${styles.marginRight} qetaBackToQuestionsBtn`}\n to={to}\n startIcon={<ChevronLeft />}\n >\n {t('backToQuestionsButton.title')}\n </LinkButton>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;;AAUa,MAAA,qBAAA,GAAwB,CAAC,KAAoC,KAAA;AACxE,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,WAAA,GAAc,YAAY,cAAc,CAAA,CAAA;AAC9C,EAAM,MAAA,cAAA,GAAiB,YAAY,iBAAiB,CAAA,CAAA;AACpD,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAE7B,EAAA,IAAI,KAAK,cAAe,EAAA,CAAA;AACxB,EAAM,MAAA,CAAC,YAAY,CAAA,GAAI,eAAgB,EAAA,CAAA;AACvC,EAAM,MAAA,MAAA,GAAS,YAAa,CAAA,GAAA,CAAI,QAAQ,CAAA,CAAA;AACxC,EAAA,IAAI,MAAQ,EAAA;AACV,IAAM,MAAA,SAAA,GAAY,eAAe,MAAM,CAAA,CAAA;AACvC,IAAA,IAAI,MAAM,UAAY,EAAA;AACpB,MAAK,EAAA,GAAA,CAAA,EAAG,WAAY,CAAA,SAAS,CAAC,CAAA,KAAA,CAAA,CAAA;AAAA,KACzB,MAAA;AACL,MAAA,EAAA,GAAK,CAAG,EAAA,cAAA,EAAgB,CAAA,QAAA,EAAW,MAAM,CAAA,CAAA,CAAA;AAAA,KAC3C;AAAA,GACF;AAEA,EACE,uBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,WAAW,CAAA,uBAAA,CAAA;AAAA,MAChC,EAAA;AAAA,MACA,SAAA,sCAAY,WAAY,EAAA,IAAA,CAAA;AAAA,KAAA;AAAA,IAEvB,EAAE,6BAA6B,CAAA;AAAA,GAClC,CAAA;AAEJ;;;;"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { useStyles, useTranslation, useEntityFollow } from '../../utils/hooks.esm.js';
|
|
3
3
|
import { Tooltip, Button } from '@material-ui/core';
|
|
4
|
+
import Visibility from '@material-ui/icons/Visibility';
|
|
5
|
+
import VisibilityOff from '@material-ui/icons/VisibilityOff';
|
|
4
6
|
|
|
5
7
|
const EntityFollowButton = (props) => {
|
|
6
8
|
const { entityRef } = props;
|
|
@@ -13,6 +15,7 @@ const EntityFollowButton = (props) => {
|
|
|
13
15
|
return /* @__PURE__ */ React.createElement(Tooltip, { title: t("entityButton.tooltip") }, /* @__PURE__ */ React.createElement(
|
|
14
16
|
Button,
|
|
15
17
|
{
|
|
18
|
+
size: "small",
|
|
16
19
|
className: `${styles.marginRight} qetaFollowEntityBtn`,
|
|
17
20
|
color: entities.isFollowingEntity(entityRef) ? "secondary" : "primary",
|
|
18
21
|
onClick: () => {
|
|
@@ -23,7 +26,7 @@ const EntityFollowButton = (props) => {
|
|
|
23
26
|
}
|
|
24
27
|
}
|
|
25
28
|
},
|
|
26
|
-
entities.isFollowingEntity(entityRef) ?
|
|
29
|
+
entities.isFollowingEntity(entityRef) ? /* @__PURE__ */ React.createElement(VisibilityOff, null) : /* @__PURE__ */ React.createElement(Visibility, null)
|
|
27
30
|
));
|
|
28
31
|
};
|
|
29
32
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EntityFollowButton.esm.js","sources":["../../../src/components/Buttons/EntityFollowButton.tsx"],"sourcesContent":["import React from 'react';\nimport { useEntityFollow, useStyles, useTranslation } from '../../utils/hooks';\nimport { Button, Tooltip } from '@material-ui/core';\n\nexport const EntityFollowButton = (props: { entityRef: string }) => {\n const { entityRef } = props;\n const styles = useStyles();\n const { t } = useTranslation();\n const entities = useEntityFollow();\n if (entities.loading) {\n return null;\n }\n\n return (\n <Tooltip title={t('entityButton.tooltip')}>\n <Button\n className={`${styles.marginRight} qetaFollowEntityBtn`}\n color={entities.isFollowingEntity(entityRef) ? 'secondary' : 'primary'}\n onClick={() => {\n if (entities.isFollowingEntity(entityRef)) {\n entities.unfollowEntity(entityRef);\n } else {\n entities.followEntity(entityRef);\n }\n }}\n >\n {entities.isFollowingEntity(entityRef)\n
|
|
1
|
+
{"version":3,"file":"EntityFollowButton.esm.js","sources":["../../../src/components/Buttons/EntityFollowButton.tsx"],"sourcesContent":["import React from 'react';\nimport { useEntityFollow, useStyles, useTranslation } from '../../utils/hooks';\nimport { Button, Tooltip } from '@material-ui/core';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\n\nexport const EntityFollowButton = (props: { entityRef: string }) => {\n const { entityRef } = props;\n const styles = useStyles();\n const { t } = useTranslation();\n const entities = useEntityFollow();\n if (entities.loading) {\n return null;\n }\n\n return (\n <Tooltip title={t('entityButton.tooltip')}>\n <Button\n size=\"small\"\n className={`${styles.marginRight} qetaFollowEntityBtn`}\n color={entities.isFollowingEntity(entityRef) ? 'secondary' : 'primary'}\n onClick={() => {\n if (entities.isFollowingEntity(entityRef)) {\n entities.unfollowEntity(entityRef);\n } else {\n entities.followEntity(entityRef);\n }\n }}\n >\n {entities.isFollowingEntity(entityRef) ? (\n <VisibilityOff />\n ) : (\n <Visibility />\n )}\n </Button>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;AAMa,MAAA,kBAAA,GAAqB,CAAC,KAAiC,KAAA;AAClE,EAAM,MAAA,EAAE,WAAc,GAAA,KAAA,CAAA;AACtB,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,WAAW,eAAgB,EAAA,CAAA;AACjC,EAAA,IAAI,SAAS,OAAS,EAAA;AACpB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AAEA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,CAAA,CAAE,sBAAsB,CACtC,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,MAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,OAAA;AAAA,MACL,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,WAAW,CAAA,oBAAA,CAAA;AAAA,MAChC,KAAO,EAAA,QAAA,CAAS,iBAAkB,CAAA,SAAS,IAAI,WAAc,GAAA,SAAA;AAAA,MAC7D,SAAS,MAAM;AACb,QAAI,IAAA,QAAA,CAAS,iBAAkB,CAAA,SAAS,CAAG,EAAA;AACzC,UAAA,QAAA,CAAS,eAAe,SAAS,CAAA,CAAA;AAAA,SAC5B,MAAA;AACL,UAAA,QAAA,CAAS,aAAa,SAAS,CAAA,CAAA;AAAA,SACjC;AAAA,OACF;AAAA,KAAA;AAAA,IAEC,QAAA,CAAS,kBAAkB,SAAS,CAAA,uCAClC,aAAc,EAAA,IAAA,CAAA,uCAEd,UAAW,EAAA,IAAA,CAAA;AAAA,GAGlB,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
2
|
import { useStyles, useTranslation, useTagsFollow } from '../../utils/hooks.esm.js';
|
|
3
|
-
import { Tooltip,
|
|
3
|
+
import { Tooltip, IconButton } from '@material-ui/core';
|
|
4
|
+
import Visibility from '@material-ui/icons/Visibility';
|
|
5
|
+
import VisibilityOff from '@material-ui/icons/VisibilityOff';
|
|
4
6
|
|
|
5
7
|
const TagFollowButton = (props) => {
|
|
6
8
|
const { tag } = props;
|
|
@@ -11,7 +13,7 @@ const TagFollowButton = (props) => {
|
|
|
11
13
|
return null;
|
|
12
14
|
}
|
|
13
15
|
return /* @__PURE__ */ React.createElement(Tooltip, { title: t("tagButton.tooltip") }, /* @__PURE__ */ React.createElement(
|
|
14
|
-
|
|
16
|
+
IconButton,
|
|
15
17
|
{
|
|
16
18
|
className: `${styles.marginRight} qetaFollowTagBtn`,
|
|
17
19
|
color: tags.isFollowingTag(tag) ? "secondary" : "primary",
|
|
@@ -23,7 +25,7 @@ const TagFollowButton = (props) => {
|
|
|
23
25
|
}
|
|
24
26
|
}
|
|
25
27
|
},
|
|
26
|
-
tags.isFollowingTag(tag) ?
|
|
28
|
+
tags.isFollowingTag(tag) ? /* @__PURE__ */ React.createElement(VisibilityOff, null) : /* @__PURE__ */ React.createElement(Visibility, null)
|
|
27
29
|
));
|
|
28
30
|
};
|
|
29
31
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"TagFollowButton.esm.js","sources":["../../../src/components/Buttons/TagFollowButton.tsx"],"sourcesContent":["import React from 'react';\nimport { useStyles, useTagsFollow, useTranslation } from '../../utils/hooks';\nimport {
|
|
1
|
+
{"version":3,"file":"TagFollowButton.esm.js","sources":["../../../src/components/Buttons/TagFollowButton.tsx"],"sourcesContent":["import React from 'react';\nimport { useStyles, useTagsFollow, useTranslation } from '../../utils/hooks';\nimport { IconButton, Tooltip } from '@material-ui/core';\nimport Visibility from '@material-ui/icons/Visibility';\nimport VisibilityOff from '@material-ui/icons/VisibilityOff';\n\nexport const TagFollowButton = (props: { tag: string }) => {\n const { tag } = props;\n const styles = useStyles();\n const { t } = useTranslation();\n const tags = useTagsFollow();\n if (tags.loading) {\n return null;\n }\n return (\n <Tooltip title={t('tagButton.tooltip')}>\n <IconButton\n className={`${styles.marginRight} qetaFollowTagBtn`}\n color={tags.isFollowingTag(tag) ? 'secondary' : 'primary'}\n onClick={() => {\n if (tags.isFollowingTag(tag)) {\n tags.unfollowTag(tag);\n } else {\n tags.followTag(tag);\n }\n }}\n >\n {tags.isFollowingTag(tag) ? <VisibilityOff /> : <Visibility />}\n </IconButton>\n </Tooltip>\n );\n};\n"],"names":[],"mappings":";;;;;;AAMa,MAAA,eAAA,GAAkB,CAAC,KAA2B,KAAA;AACzD,EAAM,MAAA,EAAE,KAAQ,GAAA,KAAA,CAAA;AAChB,EAAA,MAAM,SAAS,SAAU,EAAA,CAAA;AACzB,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,MAAM,OAAO,aAAc,EAAA,CAAA;AAC3B,EAAA,IAAI,KAAK,OAAS,EAAA;AAChB,IAAO,OAAA,IAAA,CAAA;AAAA,GACT;AACA,EAAA,uBACG,KAAA,CAAA,aAAA,CAAA,OAAA,EAAA,EAAQ,KAAO,EAAA,CAAA,CAAE,mBAAmB,CACnC,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,UAAA;AAAA,IAAA;AAAA,MACC,SAAA,EAAW,CAAG,EAAA,MAAA,CAAO,WAAW,CAAA,iBAAA,CAAA;AAAA,MAChC,KAAO,EAAA,IAAA,CAAK,cAAe,CAAA,GAAG,IAAI,WAAc,GAAA,SAAA;AAAA,MAChD,SAAS,MAAM;AACb,QAAI,IAAA,IAAA,CAAK,cAAe,CAAA,GAAG,CAAG,EAAA;AAC5B,UAAA,IAAA,CAAK,YAAY,GAAG,CAAA,CAAA;AAAA,SACf,MAAA;AACL,UAAA,IAAA,CAAK,UAAU,GAAG,CAAA,CAAA;AAAA,SACpB;AAAA,OACF;AAAA,KAAA;AAAA,IAEC,IAAA,CAAK,eAAe,GAAG,CAAA,uCAAK,aAAc,EAAA,IAAA,CAAA,uCAAM,UAAW,EAAA,IAAA,CAAA;AAAA,GAEhE,CAAA,CAAA;AAEJ;;;;"}
|
|
@@ -1,14 +1,40 @@
|
|
|
1
1
|
import React from 'react';
|
|
2
|
-
import {
|
|
2
|
+
import { ContentHeader } from '@backstage/core-components';
|
|
3
3
|
import { QuestionsContainer } from '../QuestionsContainer/QuestionsContainer.esm.js';
|
|
4
4
|
import { AskQuestionButton } from '../Buttons/AskQuestionButton.esm.js';
|
|
5
|
-
import { Container } from '@material-ui/core';
|
|
6
|
-
import { BackToQuestionsButton } from '../Buttons/BackToQuestionsButton.esm.js';
|
|
7
5
|
import { useTranslation } from '../../utils/hooks.esm.js';
|
|
6
|
+
import { Grid } from '@material-ui/core';
|
|
7
|
+
import { QuestionHighlightList } from '../QuestionHighlightList/QuestionHighlightList.esm.js';
|
|
8
|
+
import Whatshot from '@material-ui/icons/Whatshot';
|
|
8
9
|
|
|
9
10
|
const FavoritePage = () => {
|
|
10
11
|
const { t } = useTranslation();
|
|
11
|
-
return /* @__PURE__ */ React.createElement(
|
|
12
|
+
return /* @__PURE__ */ React.createElement(Grid, { container: true }, /* @__PURE__ */ React.createElement(Grid, { item: true, md: 12, lg: 9, xl: 10 }, /* @__PURE__ */ React.createElement(ContentHeader, { title: t("favoritePage.title") }, /* @__PURE__ */ React.createElement(AskQuestionButton, null)), /* @__PURE__ */ React.createElement(QuestionsContainer, { favorite: true })), /* @__PURE__ */ React.createElement(Grid, { item: true, lg: 3, xl: 2 }, /* @__PURE__ */ React.createElement(
|
|
13
|
+
QuestionHighlightList,
|
|
14
|
+
{
|
|
15
|
+
type: "hot",
|
|
16
|
+
title: t("highlights.hot.title"),
|
|
17
|
+
noQuestionsLabel: t("highlights.hot.noQuestionsLabel"),
|
|
18
|
+
icon: /* @__PURE__ */ React.createElement(Whatshot, { fontSize: "small" }),
|
|
19
|
+
options: { favorite: true }
|
|
20
|
+
}
|
|
21
|
+
), /* @__PURE__ */ React.createElement(
|
|
22
|
+
QuestionHighlightList,
|
|
23
|
+
{
|
|
24
|
+
type: "unanswered",
|
|
25
|
+
title: t("highlights.unanswered.title"),
|
|
26
|
+
noQuestionsLabel: t("highlights.unanswered.noQuestionsLabel"),
|
|
27
|
+
options: { favorite: true }
|
|
28
|
+
}
|
|
29
|
+
), /* @__PURE__ */ React.createElement(
|
|
30
|
+
QuestionHighlightList,
|
|
31
|
+
{
|
|
32
|
+
type: "incorrect",
|
|
33
|
+
title: t("highlights.incorrect.title"),
|
|
34
|
+
noQuestionsLabel: t("highlights.incorrect.noQuestionsLabel"),
|
|
35
|
+
options: { favorite: true }
|
|
36
|
+
}
|
|
37
|
+
)));
|
|
12
38
|
};
|
|
13
39
|
|
|
14
40
|
export { FavoritePage };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FavoritePage.esm.js","sources":["../../../src/components/FavoritePage/FavoritePage.tsx"],"sourcesContent":["import React from 'react';\nimport {
|
|
1
|
+
{"version":3,"file":"FavoritePage.esm.js","sources":["../../../src/components/FavoritePage/FavoritePage.tsx"],"sourcesContent":["import React from 'react';\nimport { ContentHeader } from '@backstage/core-components';\nimport { QuestionsContainer } from '../QuestionsContainer';\nimport { AskQuestionButton } from '../Buttons/AskQuestionButton';\nimport { useTranslation } from '../../utils/hooks';\nimport { Grid } from '@material-ui/core';\nimport { QuestionHighlightList } from '../QuestionHighlightList/QuestionHighlightList';\nimport Whatshot from '@material-ui/icons/Whatshot';\n\nexport const FavoritePage = () => {\n const { t } = useTranslation();\n return (\n <Grid container>\n <Grid item md={12} lg={9} xl={10}>\n <ContentHeader title={t('favoritePage.title')}>\n <AskQuestionButton />\n </ContentHeader>\n <QuestionsContainer favorite />\n </Grid>\n <Grid item lg={3} xl={2}>\n <QuestionHighlightList\n type=\"hot\"\n title={t('highlights.hot.title')}\n noQuestionsLabel={t('highlights.hot.noQuestionsLabel')}\n icon={<Whatshot fontSize=\"small\" />}\n options={{ favorite: true }}\n />\n <QuestionHighlightList\n type=\"unanswered\"\n title={t('highlights.unanswered.title')}\n noQuestionsLabel={t('highlights.unanswered.noQuestionsLabel')}\n options={{ favorite: true }}\n />\n <QuestionHighlightList\n type=\"incorrect\"\n title={t('highlights.incorrect.title')}\n noQuestionsLabel={t('highlights.incorrect.noQuestionsLabel')}\n options={{ favorite: true }}\n />\n </Grid>\n </Grid>\n );\n};\n"],"names":[],"mappings":";;;;;;;;;AASO,MAAM,eAAe,MAAM;AAChC,EAAM,MAAA,EAAE,CAAE,EAAA,GAAI,cAAe,EAAA,CAAA;AAC7B,EAAA,2CACG,IAAK,EAAA,EAAA,SAAA,EAAS,IACb,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,QAAK,IAAI,EAAA,IAAA,EAAC,EAAI,EAAA,EAAA,EAAI,IAAI,CAAG,EAAA,EAAA,EAAI,EAC5B,EAAA,kBAAA,KAAA,CAAA,aAAA,CAAC,iBAAc,KAAO,EAAA,CAAA,CAAE,oBAAoB,CAAA,EAAA,sCACzC,iBAAkB,EAAA,IAAA,CACrB,CACA,kBAAA,KAAA,CAAA,aAAA,CAAC,sBAAmB,QAAQ,EAAA,IAAA,EAAC,CAC/B,CAAA,sCACC,IAAK,EAAA,EAAA,IAAA,EAAI,MAAC,EAAI,EAAA,CAAA,EAAG,IAAI,CACpB,EAAA,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,KAAA;AAAA,MACL,KAAA,EAAO,EAAE,sBAAsB,CAAA;AAAA,MAC/B,gBAAA,EAAkB,EAAE,iCAAiC,CAAA;AAAA,MACrD,IAAM,kBAAA,KAAA,CAAA,aAAA,CAAC,QAAS,EAAA,EAAA,QAAA,EAAS,OAAQ,EAAA,CAAA;AAAA,MACjC,OAAA,EAAS,EAAE,QAAA,EAAU,IAAK,EAAA;AAAA,KAAA;AAAA,GAE5B,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,YAAA;AAAA,MACL,KAAA,EAAO,EAAE,6BAA6B,CAAA;AAAA,MACtC,gBAAA,EAAkB,EAAE,wCAAwC,CAAA;AAAA,MAC5D,OAAA,EAAS,EAAE,QAAA,EAAU,IAAK,EAAA;AAAA,KAAA;AAAA,GAE5B,kBAAA,KAAA,CAAA,aAAA;AAAA,IAAC,qBAAA;AAAA,IAAA;AAAA,MACC,IAAK,EAAA,WAAA;AAAA,MACL,KAAA,EAAO,EAAE,4BAA4B,CAAA;AAAA,MACrC,gBAAA,EAAkB,EAAE,uCAAuC,CAAA;AAAA,MAC3D,OAAA,EAAS,EAAE,QAAA,EAAU,IAAK,EAAA;AAAA,KAAA;AAAA,GAE9B,CACF,CAAA,CAAA;AAEJ;;;;"}
|