@redocly/theme 0.25.3 → 0.26.1

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.
Files changed (72) hide show
  1. package/lib/components/Feedback/Comment.d.ts +1 -1
  2. package/lib/components/Feedback/Comment.js +28 -9
  3. package/lib/components/Feedback/Emotions.js +8 -25
  4. package/lib/components/Feedback/Feedback.js +6 -0
  5. package/lib/components/Feedback/Mood.js +115 -47
  6. package/lib/components/Feedback/Rating.d.ts +1 -0
  7. package/lib/components/Feedback/Rating.js +81 -42
  8. package/lib/components/Feedback/Reasons.d.ts +1 -1
  9. package/lib/components/Feedback/Reasons.js +4 -16
  10. package/lib/components/Feedback/Scale.d.ts +4 -0
  11. package/lib/components/Feedback/Scale.js +178 -0
  12. package/lib/components/Feedback/Sentiment.js +105 -35
  13. package/lib/components/Feedback/Stars.d.ts +8 -0
  14. package/lib/components/Feedback/Stars.js +54 -0
  15. package/lib/components/Feedback/Thumbs.d.ts +2 -6
  16. package/lib/components/Feedback/Thumbs.js +9 -46
  17. package/lib/components/Feedback/index.d.ts +1 -0
  18. package/lib/components/Feedback/index.js +3 -1
  19. package/lib/components/Feedback/types.d.ts +26 -5
  20. package/lib/components/Feedback/useReportDialog.js +3 -1
  21. package/lib/components/Markdown/MarkdownLayout.js +1 -0
  22. package/lib/config.d.ts +7 -4
  23. package/lib/config.js +3 -2
  24. package/lib/icons/CheckboxIcon/CheckboxIcon.js +3 -3
  25. package/lib/icons/ColorModeIcon/ColorModeIcon.js +4 -4
  26. package/lib/icons/DissatisfiedIcon/DissatisfiedIcon.js +5 -5
  27. package/lib/icons/NeutralIcon/NeutralIcon.js +5 -5
  28. package/lib/icons/RadioCheckButtonIcon/RadioCheckButtonIcon.d.ts +4 -0
  29. package/lib/icons/RadioCheckButtonIcon/RadioCheckButtonIcon.js +16 -0
  30. package/lib/icons/RadioCheckButtonIcon/index.d.ts +1 -0
  31. package/lib/icons/RadioCheckButtonIcon/index.js +18 -0
  32. package/lib/icons/SatisfiedIcon/SatisfiedIcon.js +5 -5
  33. package/lib/icons/ThumbDownIcon/ThumbDownIcon.d.ts +4 -0
  34. package/lib/icons/ThumbDownIcon/ThumbDownIcon.js +14 -0
  35. package/lib/icons/ThumbDownIcon/index.d.ts +1 -0
  36. package/lib/icons/ThumbDownIcon/index.js +18 -0
  37. package/lib/icons/ThumbUpIcon/ThumbUpIcon.d.ts +4 -0
  38. package/lib/icons/ThumbUpIcon/ThumbUpIcon.js +14 -0
  39. package/lib/icons/ThumbUpIcon/index.d.ts +1 -0
  40. package/lib/icons/ThumbUpIcon/index.js +18 -0
  41. package/lib/types/portal/src/shared/constants.d.ts +2 -1
  42. package/lib/types/portal/src/shared/constants.js +1 -0
  43. package/lib/types/portal/src/shared/types/feedback.d.ts +2 -2
  44. package/package.json +2 -2
  45. package/src/components/Feedback/Comment.tsx +53 -20
  46. package/src/components/Feedback/Emotions.tsx +11 -32
  47. package/src/components/Feedback/Feedback.tsx +13 -1
  48. package/src/components/Feedback/Mood.tsx +164 -80
  49. package/src/components/Feedback/Rating.tsx +106 -79
  50. package/src/components/Feedback/Reasons.tsx +3 -19
  51. package/src/components/Feedback/Scale.tsx +229 -0
  52. package/src/components/Feedback/Sentiment.tsx +150 -56
  53. package/src/components/Feedback/Stars.tsx +51 -0
  54. package/src/components/Feedback/Thumbs.tsx +9 -106
  55. package/src/components/Feedback/index.ts +1 -0
  56. package/src/components/Feedback/types.ts +23 -4
  57. package/src/components/Feedback/useReportDialog.ts +3 -1
  58. package/src/components/Markdown/MarkdownLayout.tsx +1 -0
  59. package/src/config.ts +3 -2
  60. package/src/icons/CheckboxIcon/CheckboxIcon.tsx +4 -4
  61. package/src/icons/ColorModeIcon/ColorModeIcon.tsx +4 -4
  62. package/src/icons/DissatisfiedIcon/DissatisfiedIcon.tsx +5 -15
  63. package/src/icons/NeutralIcon/NeutralIcon.tsx +5 -14
  64. package/src/icons/RadioCheckButtonIcon/RadioCheckButtonIcon.tsx +19 -0
  65. package/src/icons/RadioCheckButtonIcon/index.ts +1 -0
  66. package/src/icons/SatisfiedIcon/SatisfiedIcon.tsx +5 -9
  67. package/src/icons/ThumbDownIcon/ThumbDownIcon.tsx +15 -0
  68. package/src/icons/ThumbDownIcon/index.ts +1 -0
  69. package/src/icons/ThumbUpIcon/ThumbUpIcon.tsx +15 -0
  70. package/src/icons/ThumbUpIcon/index.ts +1 -0
  71. package/src/types/portal/src/shared/constants.ts +1 -0
  72. package/src/types/portal/src/shared/types/feedback.ts +2 -2
@@ -1,10 +1,14 @@
1
1
  import * as React from 'react';
2
+ import { useEffect } from 'react';
2
3
  import styled from 'styled-components';
3
4
 
4
5
  import type { MoodProps, ReasonsProps } from '@theme/components/';
5
6
  import { useTranslate } from '@portal/hooks';
6
7
  import { Dissatisfied, Neutral, Satisfied } from '@theme/components/Feedback/Emotions';
7
8
  import { Comment, Reasons } from '@theme/components/Feedback';
9
+ import { RadioCheckButtonIcon } from '@theme/icons/RadioCheckButtonIcon';
10
+ import { Button } from '@theme/components/';
11
+ import { breakpoints } from '@portal/media-css';
8
12
 
9
13
  export enum MOOD_STATES {
10
14
  SATISFIED = 'satisfied',
@@ -20,99 +24,126 @@ export const Mood = ({ settings, onSubmit, className }: MoodProps): JSX.Element
20
24
  const [reasons, setReasons] = React.useState([] as ReasonsProps['settings']['items']);
21
25
  const { translate } = useTranslate();
22
26
 
23
- if (score && reasonsSettings?.enable && !reasons.length) {
24
- const { label: reasonsLabel, items, multi } = reasonsSettings;
25
- const buttonText = commentSettings?.enable ? 'Next' : 'Send';
26
- return (
27
- <Reasons
28
- onSubmit={({ reasons }) => setReasons(reasons)}
29
- settings={{ label: reasonsLabel, items, multi, buttonText }}
30
- />
31
- );
32
- }
27
+ const renderCommentLabel = (score: string) => {
28
+ if (!commentSettings?.enable) return '';
33
29
 
34
- if (score && commentSettings?.enable && !comment) {
35
- const renderCommentLabel = (score: string) => {
36
- switch (score) {
37
- case MOOD_STATES.SATISFIED:
38
- return translate(
39
- 'theme.feedback.settings.comment.satisfiedLabel',
40
- commentSettings.satisfiedLabel || 'What was most helpful?',
41
- );
42
- case MOOD_STATES.NEUTRAL:
43
- return translate(
44
- 'theme.feedback.settings.comment.neutralLabel',
45
- commentSettings.neutralLabel || 'What can we improve?',
46
- );
47
- case MOOD_STATES.DISSATISFIED:
48
- return translate(
49
- 'theme.feedback.settings.comment.dissatisfiedLabel',
50
- commentSettings.dissatisfiedLabel || 'What can we improve?',
51
- );
52
- default:
53
- return translate(
54
- 'theme.feedback.settings.comment.satisfiedLabel',
55
- 'What can we improve?',
56
- );
57
- }
58
- };
59
- return (
60
- <Comment
61
- onSubmit={({ comment }) => setComment(comment)}
62
- settings={{ label: renderCommentLabel(score) }}
63
- />
64
- );
65
- }
30
+ switch (score) {
31
+ case MOOD_STATES.SATISFIED:
32
+ return translate(
33
+ 'theme.feedback.settings.comment.satisfiedLabel',
34
+ commentSettings.satisfiedLabel || 'What was most helpful?',
35
+ );
36
+ case MOOD_STATES.NEUTRAL:
37
+ return translate(
38
+ 'theme.feedback.settings.comment.neutralLabel',
39
+ commentSettings.neutralLabel || 'What can we improve?',
40
+ );
41
+ case MOOD_STATES.DISSATISFIED:
42
+ return translate(
43
+ 'theme.feedback.settings.comment.dissatisfiedLabel',
44
+ commentSettings.dissatisfiedLabel || 'What can we improve?',
45
+ );
46
+ default:
47
+ return translate('theme.feedback.settings.comment.satisfiedLabel', 'What can we improve?');
48
+ }
49
+ };
66
50
 
67
- if (score) {
68
- if (!isSubmitted) {
69
- onSubmit({
70
- score,
71
- comment,
72
- reasons,
73
- });
51
+ const displayReasons = !!score && reasonsSettings?.enable;
52
+ const displayComment = !!score && commentSettings?.enable;
53
+ const displaySubmitBnt = !!score && (displayReasons || displayComment);
74
54
 
75
- setIsSubmitted(true);
55
+ const onSubmitMoodForm = () => {
56
+ onSubmit({
57
+ score,
58
+ comment,
59
+ reasons,
60
+ });
61
+ setIsSubmitted(true);
62
+ };
63
+
64
+ useEffect(() => {
65
+ if (score && !displayComment && !displayReasons) {
66
+ onSubmitMoodForm();
76
67
  }
68
+ // eslint-disable-next-line react-hooks/exhaustive-deps
69
+ }, [score, displayComment, displayReasons]);
77
70
 
71
+ if (isSubmitted) {
78
72
  return (
79
73
  <Wrapper>
80
74
  <Label data-translation-key="theme.feedback.settings.submitText">
81
75
  {translate(
82
76
  'theme.feedback.settings.submitText',
83
- submitText || 'Thank you for your feedback!',
77
+ submitText || 'Thank you for helping improve our documentation!',
84
78
  )}
85
79
  </Label>
80
+ <RadioCheckButtonIcon />
86
81
  </Wrapper>
87
82
  );
88
83
  }
89
84
 
90
85
  return (
91
86
  <Wrapper data-component-name="Feedback/Mood" className={className}>
92
- <Label data-translation-key="theme.feedback.settings.label">
93
- {translate('theme.feedback.settings.label', label || 'Was this page helpful?')}
94
- </Label>
95
- <Vote
96
- onClick={() => {
97
- setScore(MOOD_STATES.DISSATISFIED);
98
- }}
99
- >
100
- <Dissatisfied />
101
- </Vote>
102
- <Vote
103
- onClick={() => {
104
- setScore(MOOD_STATES.NEUTRAL);
105
- }}
106
- >
107
- <Neutral />
108
- </Vote>
109
- <Vote
110
- onClick={() => {
111
- setScore(MOOD_STATES.SATISFIED);
112
- }}
113
- >
114
- <Satisfied />
115
- </Vote>
87
+ <StyledForm>
88
+ <StyledFormMandatoryFields>
89
+ <Label data-translation-key="theme.feedback.settings.label">
90
+ {translate('theme.feedback.settings.label', label || 'Was this page helpful?')}
91
+ </Label>
92
+ <StyledMandatoryFieldContainer>
93
+ <>
94
+ <Vote
95
+ className={`${score === MOOD_STATES.DISSATISFIED ? 'active' : ''}`}
96
+ onClick={() => {
97
+ setScore(MOOD_STATES.DISSATISFIED);
98
+ }}
99
+ >
100
+ <Dissatisfied />
101
+ </Vote>
102
+ <Vote
103
+ className={`${score === MOOD_STATES.NEUTRAL ? 'active' : ''}`}
104
+ onClick={() => {
105
+ setScore(MOOD_STATES.NEUTRAL);
106
+ }}
107
+ >
108
+ <Neutral />
109
+ </Vote>
110
+ <Vote
111
+ className={`${score === MOOD_STATES.SATISFIED ? 'active' : ''}`}
112
+ onClick={() => {
113
+ setScore(MOOD_STATES.SATISFIED);
114
+ }}
115
+ >
116
+ <Satisfied />
117
+ </Vote>
118
+ </>
119
+ </StyledMandatoryFieldContainer>
120
+ </StyledFormMandatoryFields>
121
+ <StyledFormOptionalFields>
122
+ {displayReasons && (
123
+ <Reasons
124
+ settings={{
125
+ label: reasonsSettings?.label,
126
+ items: reasonsSettings?.items || [],
127
+ multi: reasonsSettings?.multi,
128
+ }}
129
+ onChange={setReasons}
130
+ />
131
+ )}
132
+
133
+ {displayComment && (
134
+ <Comment
135
+ standAlone={false}
136
+ onSubmit={({ comment }) => setComment(comment)}
137
+ settings={{ label: renderCommentLabel(score) }}
138
+ />
139
+ )}
140
+ </StyledFormOptionalFields>
141
+ {displaySubmitBnt && (
142
+ <ButtonsContainer>
143
+ <SubmitButton onClick={onSubmitMoodForm}>Submit</SubmitButton>
144
+ </ButtonsContainer>
145
+ )}
146
+ </StyledForm>
116
147
  </Wrapper>
117
148
  );
118
149
  };
@@ -120,19 +151,72 @@ export const Mood = ({ settings, onSubmit, className }: MoodProps): JSX.Element
120
151
  const Wrapper = styled.div`
121
152
  font-family: var(--font-family-base);
122
153
  display: flex;
154
+ justify-content: space-between;
123
155
  align-items: center;
156
+ padding: 16px 24px;
157
+ width: 424px;
158
+ border-radius: 8px;
159
+ background: var(--bg-raised);
160
+
161
+ @media screen and (max-width: ${breakpoints.small}) {
162
+ width: 100%;
163
+ }
124
164
  `;
125
165
 
126
166
  const Label = styled.h3`
127
- font-family: var(--h3-font-family);
128
- font-weight: var(--h3-font-weight);
129
- font-size: var(--h3-font-size);
130
- line-height: var(--h3-line-height);
131
- color: var(--h3-text-color);
132
167
  margin-right: 15px;
168
+ font-family: var(--h4-font-family);
169
+ font-weight: var(--h4-font-weight);
170
+ font-size: var(--h4-font-size);
171
+ line-height: var(--h4-line-height);
172
+ color: var(--h3-text-color);
133
173
  `;
134
174
 
135
175
  const Vote = styled.div`
136
176
  cursor: pointer;
137
177
  margin: 0 10px;
178
+ color: var(--text-description);
179
+ &.active {
180
+ color: var(--text-primary);
181
+ }
182
+ &:hover {
183
+ color: var(--text-primary);
184
+ svg {
185
+ > g {
186
+ fill: var(--text-primary);
187
+ }
188
+ }
189
+ }
190
+ `;
191
+
192
+ const SubmitButton = styled(Button).attrs(() => ({
193
+ color: 'primary',
194
+ }))`
195
+ width: 100px;
196
+ margin-left: 0;
197
+ margin-right: 0;
198
+ `;
199
+
200
+ const ButtonsContainer = styled.div`
201
+ display: flex;
202
+ justify-content: end;
203
+ `;
204
+
205
+ const StyledForm = styled.form`
206
+ width: 100%;
207
+ `;
208
+
209
+ const StyledFormOptionalFields = styled.div`
210
+ display: flex;
211
+ flex-flow: column;
212
+ `;
213
+
214
+ const StyledFormMandatoryFields = styled.div`
215
+ display: flex;
216
+ justify-content: space-between;
217
+ `;
218
+
219
+ const StyledMandatoryFieldContainer = styled.div`
220
+ display: flex;
221
+ align-items: center;
138
222
  `;
@@ -1,61 +1,48 @@
1
1
  import * as React from 'react';
2
2
  import styled from 'styled-components';
3
+ import { useEffect } from 'react';
3
4
 
4
5
  import type { RatingProps, ReasonsProps } from '@theme/components/Feedback';
5
6
  import { Comment, Reasons } from '@theme/components/Feedback';
7
+ import { Button } from '@theme/components';
6
8
  import { useTranslate } from '@portal/hooks';
9
+ import { RadioCheckButtonIcon } from '@theme/icons/RadioCheckButtonIcon';
10
+ import { breakpoints } from '@portal/media-css';
7
11
 
8
- type StarsProps = {
9
- onSubmit: (value: number) => void;
10
- max: number;
11
- };
12
+ import { Stars } from './Stars';
13
+
14
+ export const FEEDBACK_MAX_RATING = 5;
12
15
 
13
16
  export const Rating = ({ settings, onSubmit, className }: RatingProps): JSX.Element => {
14
- const {
15
- label,
16
- max,
17
- submitText,
18
- comment: commentSettings,
19
- reasons: reasonsSettings,
20
- } = settings || {};
17
+ const { label, submitText, comment: commentSettings, reasons: reasonsSettings } = settings || {};
21
18
  const [isSubmitted, setIsSubmitted] = React.useState(false);
22
19
  const [score, setScore] = React.useState(0);
23
- const [comment, setComment] = React.useState('');
24
20
  const [reasons, setReasons] = React.useState([] as ReasonsProps['settings']['items']);
21
+ const [comment, setComment] = React.useState('');
25
22
  const { translate } = useTranslate();
26
- const maxRating = max || 5;
27
23
 
28
- if (score && reasonsSettings?.enable && !reasons.length) {
29
- const { label: reasonsLabel, items, multi } = reasonsSettings;
30
- const buttonText = commentSettings?.enable ? 'Next' : 'Send';
31
- return (
32
- <Reasons
33
- onSubmit={({ reasons }) => setReasons(reasons)}
34
- settings={{ label: reasonsLabel, items, multi, buttonText }}
35
- />
36
- );
37
- }
24
+ const onSubmitRatingForm = () => {
25
+ onSubmit({
26
+ score,
27
+ comment,
28
+ reasons,
29
+ max: FEEDBACK_MAX_RATING,
30
+ });
31
+ setIsSubmitted(true);
32
+ };
38
33
 
39
- if (score && commentSettings?.enable && !comment) {
40
- return (
41
- <Comment
42
- onSubmit={({ comment }) => setComment(comment)}
43
- settings={{ label: commentSettings.label }}
44
- />
45
- );
46
- }
34
+ const displayReasons = !!score && reasonsSettings?.enable;
35
+ const displayComment = !!score && commentSettings?.enable;
36
+ const displaySubmitBnt = !!score && (displayReasons || displayComment);
47
37
 
48
- if (score) {
49
- if (!isSubmitted) {
50
- onSubmit({
51
- score,
52
- comment,
53
- reasons,
54
- max: maxRating,
55
- });
56
- setIsSubmitted(true);
38
+ useEffect(() => {
39
+ if (score && !displayComment && !displayReasons) {
40
+ onSubmitRatingForm();
57
41
  }
42
+ // eslint-disable-next-line react-hooks/exhaustive-deps
43
+ }, [score, displayComment, displayReasons]);
58
44
 
45
+ if (isSubmitted) {
59
46
  return (
60
47
  <Wrapper>
61
48
  <Label data-translation-key="theme.feedback.settings.submitText">
@@ -64,64 +51,104 @@ export const Rating = ({ settings, onSubmit, className }: RatingProps): JSX.Elem
64
51
  submitText || 'Thank you for helping improve our documentation!',
65
52
  )}
66
53
  </Label>
54
+ <RadioCheckButtonIcon />
67
55
  </Wrapper>
68
56
  );
69
57
  }
70
58
 
71
59
  return (
72
60
  <Wrapper data-component-name="Feedback/Rating" className={className}>
73
- <Label data-translation-key="theme.feedback.settings.label">
74
- {translate('theme.feedback.settings.label', label || 'How helpful was this page?')}
75
- </Label>
76
- <Stars max={maxRating} onSubmit={setScore} />
61
+ <StyledForm>
62
+ <StyledFormMandatoryFields>
63
+ <Label data-translation-key="theme.feedback.settings.label">
64
+ {translate('theme.feedback.settings.label', label || 'How helpful was this page?')}
65
+ </Label>
66
+
67
+ <StyledMandatoryFieldContainer>
68
+ <Stars max={FEEDBACK_MAX_RATING} onChange={setScore} value={score} />
69
+ </StyledMandatoryFieldContainer>
70
+ </StyledFormMandatoryFields>
71
+
72
+ <StyledFormOptionalFields>
73
+ {displayReasons && (
74
+ <Reasons
75
+ settings={{
76
+ label: reasonsSettings?.label,
77
+ items: reasonsSettings?.items || [],
78
+ multi: reasonsSettings?.multi,
79
+ }}
80
+ onChange={setReasons}
81
+ />
82
+ )}
83
+
84
+ {displayComment && (
85
+ <Comment
86
+ standAlone={false}
87
+ onSubmit={({ comment }) => setComment(comment)}
88
+ settings={{ label: commentSettings.label }}
89
+ />
90
+ )}
91
+ </StyledFormOptionalFields>
92
+ {displaySubmitBnt && (
93
+ <ButtonsContainer>
94
+ <SubmitButton onClick={onSubmitRatingForm}>Submit</SubmitButton>
95
+ </ButtonsContainer>
96
+ )}
97
+ </StyledForm>
77
98
  </Wrapper>
78
99
  );
79
100
  };
80
101
 
81
- const Stars = ({ max, onSubmit }: StarsProps): JSX.Element => {
82
- const [hovered, setHovered] = React.useState(0);
83
- const stars: JSX.Element[] = [];
84
-
85
- for (let index = 1; index <= max; index++) {
86
- stars.push(
87
- <Star
88
- key={index}
89
- onClick={() => onSubmit(index)}
90
- onMouseOver={() => setHovered(index)}
91
- onMouseLeave={() => setHovered(0)}
92
- >
93
- <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 20 20">
94
- {hovered < index ? (
95
- <g fill="#e8c002">
96
- <path d="M20 7h-7L10 .5 7 7H0l5.46 5.47-1.64 7 6.18-3.7 6.18 3.73-1.63-7zm-10 6.9-3.76 2.27 1-4.28L3.5 8.5h4.61L10 4.6l1.9 3.9h4.6l-3.73 3.4 1 4.28z" />
97
- </g>
98
- ) : (
99
- <g fill="#e8c002">
100
- <path d="M20 7h-7L10 .5 7 7H0l5.46 5.47-1.64 7 6.18-3.7 6.18 3.73-1.63-7z" />
101
- </g>
102
- )}
103
- </svg>
104
- </Star>,
105
- );
106
- }
102
+ const StyledForm = styled.form`
103
+ width: 100%;
104
+ `;
107
105
 
108
- return <>{stars}</>;
109
- };
106
+ const StyledFormOptionalFields = styled.div`
107
+ display: flex;
108
+ flex-flow: column;
109
+ `;
110
+
111
+ const StyledFormMandatoryFields = styled.div`
112
+ display: flex;
113
+ justify-content: space-between;
114
+ `;
115
+
116
+ const StyledMandatoryFieldContainer = styled.div`
117
+ display: flex;
118
+ `;
110
119
 
111
120
  const Wrapper = styled.div`
112
121
  display: flex;
122
+ justify-content: space-between;
113
123
  align-items: center;
114
- `;
124
+ padding: 16px 24px;
125
+ width: 424px;
126
+ border-radius: 8px;
127
+ background: var(--bg-raised);
115
128
 
116
- const Star = styled.span`
117
- cursor: pointer;
129
+ @media screen and (max-width: ${breakpoints.small}) {
130
+ width: 100%;
131
+ }
118
132
  `;
119
133
 
120
134
  const Label = styled.h3`
121
135
  margin-right: 15px;
122
- font-family: var(--h3-font-family);
123
- font-weight: var(--h3-font-weight);
124
- font-size: var(--h3-font-size);
125
- line-height: var(--h3-line-height);
136
+ font-family: var(--h4-font-family);
137
+ font-weight: var(--h4-font-weight);
138
+ font-size: var(--h4-font-size);
139
+ line-height: var(--h4-line-height);
126
140
  color: var(--h3-text-color);
127
141
  `;
142
+
143
+ const SubmitButton = styled(Button).attrs(() => ({
144
+ color: 'primary',
145
+ }))`
146
+ width: 100px;
147
+ margin-left: 0;
148
+ margin-right: 0;
149
+ `;
150
+
151
+ const ButtonsContainer = styled.div`
152
+ display: flex;
153
+ justify-content: end;
154
+ `;
@@ -1,12 +1,11 @@
1
1
  import * as React from 'react';
2
2
  import styled from 'styled-components';
3
3
 
4
- import { Button } from '@theme/components/Button/Button';
5
4
  import type { ReasonsProps } from '@theme/components/Feedback';
6
5
  import { useTranslate } from '@portal/hooks';
7
6
 
8
- export const Reasons = ({ settings, onSubmit, className }: ReasonsProps): JSX.Element => {
9
- const { label, multi, buttonText, items = [] } = settings;
7
+ export const Reasons = ({ settings, onChange, className }: ReasonsProps): JSX.Element => {
8
+ const { label, multi, items = [] } = settings;
10
9
  const [checkedState, setCheckedState] = React.useState(new Array(items.length).fill(false));
11
10
  const { translate } = useTranslate();
12
11
 
@@ -20,12 +19,9 @@ export const Reasons = ({ settings, onSubmit, className }: ReasonsProps): JSX.El
20
19
  const updatedCheckedState = multi
21
20
  ? checkedState.map((item, index) => (index === position ? !item : item))
22
21
  : items.map((_, idx) => position === idx);
23
-
24
22
  setCheckedState(updatedCheckedState);
25
- };
26
23
 
27
- const submitForm = () => {
28
- onSubmit({ reasons: items.filter((_, index) => !!checkedState[index]) });
24
+ onChange(items.filter((_, index) => !!updatedCheckedState[index]));
29
25
  };
30
26
 
31
27
  return (
@@ -58,9 +54,6 @@ export const Reasons = ({ settings, onSubmit, className }: ReasonsProps): JSX.El
58
54
  </label>
59
55
  </OptionWrapper>
60
56
  ))}
61
- <SendButton data-translation-key="theme.feedback.settings.reasons.send" onClick={submitForm}>
62
- {translate('theme.feedback.settings.reasons.send', buttonText || 'Send')}
63
- </SendButton>
64
57
  </Wrapper>
65
58
  );
66
59
  };
@@ -80,15 +73,6 @@ const Label = styled.h3`
80
73
  margin-right: 15px;
81
74
  `;
82
75
 
83
- const SendButton = styled(Button).attrs(() => ({
84
- color: 'primary',
85
- }))`
86
- width: 100px;
87
- margin-left: 0;
88
- margin-right: 0;
89
- margin-top: 15px;
90
- `;
91
-
92
76
  const OptionWrapper = styled.div`
93
77
  margin: 5px 0;
94
78
  display: flex;