pixel-react 1.4.1 → 1.4.2
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/lib/components/Select/types.d.ts +1 -0
- package/lib/index.d.ts +4 -1
- package/lib/index.esm.js +70 -16
- package/lib/index.esm.js.map +1 -1
- package/lib/index.js +70 -15
- package/lib/index.js.map +1 -1
- package/lib/tsconfig.tsbuildinfo +1 -1
- package/lib/utils/downloadFile/saveFileFromBlob.d.ts +1 -0
- package/package.json +1 -1
- package/src/assets/icons/add_label_icon.svg +3 -0
- package/src/assets/icons/label_icon.svg +8 -0
- package/src/assets/icons/sample_template_first.svg +29 -0
- package/src/assets/icons/sample_template_second.svg +47 -0
- package/src/components/AllProjectsDropdown/AllProjectsDropdown.scss +2 -3
- package/src/components/AllProjectsDropdown/AllProjectsDropdown.tsx +1 -0
- package/src/components/AppHeader/AppHeader.scss +0 -1
- package/src/components/Icon/Icon.tsx +1 -0
- package/src/components/Icon/iconList.ts +10 -2
- package/src/components/Modal/Modal.tsx +2 -2
- package/src/components/Select/Select.tsx +2 -0
- package/src/components/Select/types.ts +5 -0
- package/src/components/StateDropdown/StateDropdown.tsx +18 -6
- package/src/index.ts +2 -0
- package/src/utils/downloadFile/saveFileFromBlob.stories.tsx +62 -0
- package/src/utils/downloadFile/saveFileFromBlob.ts +40 -0
- /package/src/assets/icons/{fireflink_standard_template.svg → standard_template.svg} +0 -0
@@ -58,9 +58,9 @@ const Modal: React.FC<ModalProps> = ({
|
|
58
58
|
<div
|
59
59
|
style={{
|
60
60
|
boxShadow: boxShadow,
|
61
|
-
borderRadius:
|
61
|
+
borderRadius: '12px' ,
|
62
62
|
}}
|
63
|
-
className="ff-modal-container"
|
63
|
+
className="ff-modal-container"
|
64
64
|
>
|
65
65
|
<div
|
66
66
|
className={classNames(
|
@@ -29,6 +29,7 @@ const Select: FC<SelectProps> = ({
|
|
29
29
|
height = 32,
|
30
30
|
width = '100%',
|
31
31
|
onBlur = () => {},
|
32
|
+
disableInput = false
|
32
33
|
}) => {
|
33
34
|
const selectWidth = typeof width === 'number' ? `${width}px` : width;
|
34
35
|
|
@@ -176,6 +177,7 @@ const Select: FC<SelectProps> = ({
|
|
176
177
|
style={{ zIndex: optionZIndex, color: selectedOptionColor }}
|
177
178
|
disabled={disabled}
|
178
179
|
onChange={handleChange}
|
180
|
+
readOnly={disableInput}
|
179
181
|
/>
|
180
182
|
{optionsRequired && (
|
181
183
|
<div
|
@@ -129,7 +129,9 @@ const StateDropdown = ({
|
|
129
129
|
optionsList={options}
|
130
130
|
selectedOption={selectedOption}
|
131
131
|
showLabel={false}
|
132
|
-
showBorder={
|
132
|
+
showBorder={false}
|
133
|
+
disableInput={true}
|
134
|
+
height={24}
|
133
135
|
/>
|
134
136
|
) : (
|
135
137
|
<Select
|
@@ -139,7 +141,9 @@ const StateDropdown = ({
|
|
139
141
|
optionsList={options}
|
140
142
|
selectedOption={selectedOption}
|
141
143
|
showLabel={false}
|
142
|
-
showBorder={
|
144
|
+
showBorder={false}
|
145
|
+
disableInput={true}
|
146
|
+
height={24}
|
143
147
|
/>
|
144
148
|
);
|
145
149
|
} else if (
|
@@ -154,7 +158,9 @@ const StateDropdown = ({
|
|
154
158
|
optionsList={options}
|
155
159
|
selectedOption={selectedOption}
|
156
160
|
showLabel={false}
|
157
|
-
showBorder={
|
161
|
+
showBorder={false}
|
162
|
+
disableInput={true}
|
163
|
+
height={24}
|
158
164
|
/>
|
159
165
|
);
|
160
166
|
} else if (currentState === 'APPROVED') {
|
@@ -166,7 +172,9 @@ const StateDropdown = ({
|
|
166
172
|
optionsList={options}
|
167
173
|
selectedOption={selectedOption}
|
168
174
|
showLabel={false}
|
169
|
-
showBorder={
|
175
|
+
showBorder={false}
|
176
|
+
disableInput={true}
|
177
|
+
height={24}
|
170
178
|
/>
|
171
179
|
);
|
172
180
|
} else if (currentState === 'REJECTED' && userHasOnlyViewAccess) {
|
@@ -178,7 +186,9 @@ const StateDropdown = ({
|
|
178
186
|
optionsList={options}
|
179
187
|
selectedOption={selectedOption}
|
180
188
|
showLabel={false}
|
181
|
-
showBorder={
|
189
|
+
showBorder={false}
|
190
|
+
disableInput={true}
|
191
|
+
height={24}
|
182
192
|
/>
|
183
193
|
);
|
184
194
|
} else if (currentState === 'NEW' && userHasOnlyViewAccess) {
|
@@ -190,7 +200,9 @@ const StateDropdown = ({
|
|
190
200
|
optionsList={options}
|
191
201
|
selectedOption={selectedOption}
|
192
202
|
showLabel={false}
|
193
|
-
showBorder={
|
203
|
+
showBorder={false}
|
204
|
+
disableInput={true}
|
205
|
+
height={24}
|
194
206
|
/>
|
195
207
|
);
|
196
208
|
} else {
|
package/src/index.ts
CHANGED
@@ -80,6 +80,7 @@ import MultiRadialChart from './components/Charts/MultiRadialChart';
|
|
80
80
|
import Editor from './components/Editor/Editor';
|
81
81
|
import { getSequentialPayload } from './utils/getSequentialPayload/getSequentialPayload';
|
82
82
|
import ConnectingBranch from './components/ConnectingBranch/ConnectingBranch';
|
83
|
+
import { saveFileFromBlob } from './utils/downloadFile/saveFileFromBlob'
|
83
84
|
|
84
85
|
export {
|
85
86
|
Button,
|
@@ -163,4 +164,5 @@ export {
|
|
163
164
|
getEncryptedData,
|
164
165
|
truncateText,
|
165
166
|
getSequentialPayload,
|
167
|
+
saveFileFromBlob,
|
166
168
|
};
|
@@ -0,0 +1,62 @@
|
|
1
|
+
import { saveFileFromBlob } from './saveFileFromBlob';
|
2
|
+
import { Toastify, toast } from '../../components/Toastify/Toastify';
|
3
|
+
|
4
|
+
export default {
|
5
|
+
title: 'Utils/saveFileFromBlob',
|
6
|
+
component: saveFileFromBlob,
|
7
|
+
};
|
8
|
+
|
9
|
+
export const Default = () => {
|
10
|
+
const testCases = [
|
11
|
+
{
|
12
|
+
blob: new Blob(['Hello, world!'], { type: 'text/plain' }),
|
13
|
+
filename: 'hello.txt',
|
14
|
+
},
|
15
|
+
{
|
16
|
+
blob: new Blob(['{ "key": "value" }'], { type: 'application/json' }),
|
17
|
+
filename: 'data.json',
|
18
|
+
},
|
19
|
+
{
|
20
|
+
blob: null,
|
21
|
+
filename: 'invalid.txt',
|
22
|
+
expectedError: 'Invalid Blob object',
|
23
|
+
},
|
24
|
+
];
|
25
|
+
|
26
|
+
const handleDownload = (blob: Blob | null, filename: string) => {
|
27
|
+
try {
|
28
|
+
if (blob instanceof Blob) {
|
29
|
+
saveFileFromBlob(blob, filename);
|
30
|
+
toast.success(`File "${filename}" downloaded successfully!`);
|
31
|
+
} else {
|
32
|
+
throw new Error('Invalid Blob object');
|
33
|
+
}
|
34
|
+
} catch (error: any) {
|
35
|
+
toast.error(error.message);
|
36
|
+
}
|
37
|
+
};
|
38
|
+
|
39
|
+
return (
|
40
|
+
<>
|
41
|
+
<div>
|
42
|
+
<h1>saveFileFromBlob - Test Cases</h1>
|
43
|
+
{testCases.map(({ blob, filename, expectedError }, index) => (
|
44
|
+
<div key={index} style={{ marginBottom: '1rem' }}>
|
45
|
+
<button
|
46
|
+
onClick={() => handleDownload(blob as Blob, filename)}
|
47
|
+
style={{ marginRight: '1rem' }}
|
48
|
+
>
|
49
|
+
Download {filename}
|
50
|
+
</button>
|
51
|
+
{expectedError && (
|
52
|
+
<span style={{ color: 'red' }}>
|
53
|
+
Expected Error: {expectedError}
|
54
|
+
</span>
|
55
|
+
)}
|
56
|
+
</div>
|
57
|
+
))}
|
58
|
+
</div>
|
59
|
+
<Toastify />
|
60
|
+
</>
|
61
|
+
);
|
62
|
+
};
|
@@ -0,0 +1,40 @@
|
|
1
|
+
// saveFileFromBlob.ts
|
2
|
+
|
3
|
+
/**
|
4
|
+
* Save a file from a Blob object.
|
5
|
+
* This utility handles downloading files in browsers, including IE support.
|
6
|
+
*
|
7
|
+
* @param blob - The Blob object representing the file.
|
8
|
+
* @param filename - The name of the file to save.
|
9
|
+
*/
|
10
|
+
interface NavigatorWithMsSaveBlob extends Navigator {
|
11
|
+
msSaveOrOpenBlob?: (_blob: Blob, _filename: string) => void;
|
12
|
+
}
|
13
|
+
|
14
|
+
export const saveFileFromBlob = (blob: Blob, filename: string): void => {
|
15
|
+
if (!blob || !(blob instanceof Blob)) {
|
16
|
+
console.error('Invalid Blob object');
|
17
|
+
throw new Error('Invalid Blob object');
|
18
|
+
}
|
19
|
+
|
20
|
+
const navigatorWithMsSaveBlob = window.navigator as NavigatorWithMsSaveBlob;
|
21
|
+
|
22
|
+
if (navigatorWithMsSaveBlob.msSaveOrOpenBlob) {
|
23
|
+
const saveBlob = navigatorWithMsSaveBlob.msSaveOrOpenBlob;
|
24
|
+
if (saveBlob) {
|
25
|
+
saveBlob(blob, filename);
|
26
|
+
}
|
27
|
+
} else {
|
28
|
+
// For modern browsers
|
29
|
+
const anchorElement = document.createElement('a');
|
30
|
+
document.body.appendChild(anchorElement);
|
31
|
+
const objectURL = window.URL.createObjectURL(blob);
|
32
|
+
anchorElement.href = objectURL;
|
33
|
+
anchorElement.download = filename;
|
34
|
+
anchorElement.click();
|
35
|
+
setTimeout(() => {
|
36
|
+
window.URL.revokeObjectURL(objectURL);
|
37
|
+
document.body.removeChild(anchorElement);
|
38
|
+
}, 0);
|
39
|
+
}
|
40
|
+
};
|
File without changes
|