pollination-react-io 1.28.5 → 1.29.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/build/index.js CHANGED
@@ -37974,9 +37974,15 @@ var usePollinationPanel = function () {
37974
37974
  return;
37975
37975
  return panel.GetArtifactAsBase64(key, accept);
37976
37976
  }, [panel]);
37977
+ var fromFileToBase64 = React.useCallback(function (filePath) {
37978
+ if (!panel)
37979
+ return;
37980
+ return panel.FromFileToBase64(filePath);
37981
+ }, [panel]);
37977
37982
  return {
37978
37983
  getFileBase64: getFileBase64,
37979
- saveFileBase64: saveFileBase64
37984
+ saveFileBase64: saveFileBase64,
37985
+ fromFileToBase64: fromFileToBase64
37980
37986
  };
37981
37987
  };
37982
37988
 
@@ -44275,7 +44281,11 @@ var RecipeInputsForm = function (_a) {
44275
44281
  var inputProps = __assign({}, register(input.name, {
44276
44282
  valueAsNumber: ['DAGIntegerInput', 'DAGNumberInput'].includes(input.type)
44277
44283
  }));
44278
- var handleReset = function () { return resetField(input.name); };
44284
+ var handleReset = function () {
44285
+ resetField(input.name, {
44286
+ defaultValue: defaultValue
44287
+ });
44288
+ };
44279
44289
  return (React__default["default"].createElement(FormInput, { key: "".concat(input.name, "-").concat(i), name: input.name, description: input.description, hidden: hidden, errorMessage: !input.required && errors[input.name] ? (_a = errors[input.name]) === null || _a === void 0 ? void 0 : _a.message : undefined }, (function () {
44280
44290
  var _a;
44281
44291
  switch (input.type) {
@@ -44319,9 +44329,11 @@ var RecipeInputsForm = function (_a) {
44319
44329
  var key = _a[0], val = _a[1];
44320
44330
  return (
44321
44331
  // @ts-ignore
44322
- val.type !== 'required' && React__default["default"].createElement("li", { key: key, style: { color: 'red', fontSize: '0.8rem', listStyle: 'none' } }, "".concat(key, " ").concat(val.message, ".")));
44332
+ val.type !== 'required'
44333
+ ? React__default["default"].createElement("li", { key: key, style: { color: 'red', fontSize: '0.8rem', listStyle: 'none' } }, "".concat(key, " ").concat(val.message, "."))
44334
+ : React__default["default"].createElement("li", { key: key, style: { color: 'red', fontSize: '0.8rem', listStyle: 'none' } }, "".concat(key, " is missing.")));
44323
44335
  }))) :
44324
- isSubmitSuccessful ? 'Study has been successfully submitted.' : 'Please, add the missing information.' },
44336
+ isSubmitSuccessful ? 'Study has been successfully submitted.' : null },
44325
44337
  React__default["default"].createElement(Button, { type: 'submit', form: recipe.metadata.name, disabled: !isValid || loading, style: {
44326
44338
  width: 'fit-content',
44327
44339
  }, loading: loading }, "Create Study"))))));
@@ -47184,8 +47196,11 @@ var jszip_min = createCommonjsModule(function (module, exports) {
47184
47196
  var shortDebounce = useDebounce(200);
47185
47197
  var ICON_SIZE = 18;
47186
47198
  var FilePreview = function (_a) {
47187
- var projectOwner = _a.projectOwner, projectName = _a.projectName, jobId = _a.jobId, value = _a.value, client = _a.client, inputProps = _a.inputProps, onPreviewChange = _a.onPreviewChange // Use it for streamlit setComponentValue
47199
+ var projectOwner = _a.projectOwner, projectName = _a.projectName, jobId = _a.jobId, value = _a.value, // cloud controller
47200
+ client = _a.client, inputProps = _a.inputProps, onPreviewChange = _a.onPreviewChange, // Use it for streamlit setComponentValue
47201
+ enableFilePicker = _a.enableFilePicker, localPath = _a.localPath // local controller
47188
47202
  ;
47203
+ var fromFileToBase64 = usePollinationPanel().fromFileToBase64;
47189
47204
  var getExtension = function (fileName) {
47190
47205
  if (!fileName)
47191
47206
  return;
@@ -47194,13 +47209,14 @@ var FilePreview = function (_a) {
47194
47209
  return arr.at(arr.length - 1);
47195
47210
  }
47196
47211
  };
47212
+ var host = getHost();
47197
47213
  var _b = React.useState(value), selArtifact = _b[0], setSelArtifact = _b[1];
47214
+ var _c = React.useState(localPath), selFilePath = _c[0], setSelFilePath = _c[1];
47198
47215
  var downloadArtifact = useArtifacts(projectOwner, projectName, client).downloadArtifact;
47199
- var _c = React.useState(), preview = _c[0], setPreview = _c[1];
47200
- var _d = React.useState(), currBlob = _d[0], setCurrBlob = _d[1];
47201
- var _e = React.useState(getExtension(value === null || value === void 0 ? void 0 : value.file_name)), currFileExtension = _e[0], setCurrFileExtension = _e[1];
47216
+ var _d = React.useState(), preview = _d[0], setPreview = _d[1];
47217
+ var _e = React.useState(), currBlob = _e[0], setCurrBlob = _e[1];
47218
+ var _f = React.useState(getExtension((value === null || value === void 0 ? void 0 : value.file_name) || getExtension(localPath))), currFileExtension = _f[0], setCurrFileExtension = _f[1];
47202
47219
  var allowedFileTypes = ['application/zip', 'text/plain'];
47203
- var host = getHost();
47204
47220
  var parser = {
47205
47221
  'text/plain': function (blob) {
47206
47222
  var reader = new FileReader();
@@ -47240,13 +47256,70 @@ var FilePreview = function (_a) {
47240
47256
  }); });
47241
47257
  }
47242
47258
  };
47243
- // Internal onChange
47259
+ // Internal onChange cloud
47244
47260
  var onChange = React.useCallback(function (selArtifact) {
47245
- // console.log(selArtifact)
47246
47261
  setSelArtifact(selArtifact);
47247
47262
  !selArtifact && setPreview(undefined);
47248
47263
  !selArtifact && setCurrFileExtension(undefined);
47249
47264
  }, []);
47265
+ // Internal onChange local
47266
+ var onChangeLocal = React.useCallback(function (path) {
47267
+ setSelFilePath(path);
47268
+ !selFilePath && setPreview(undefined);
47269
+ !selFilePath && setCurrFileExtension(undefined);
47270
+ }, []);
47271
+ var base64AndFetch = function (path) {
47272
+ if (!path)
47273
+ return;
47274
+ var data = fromFileToBase64(path);
47275
+ var base64Data = data === null || data === void 0 ? void 0 : data.data;
47276
+ if (!base64Data)
47277
+ return;
47278
+ // bas64 mapping
47279
+ var t;
47280
+ switch (getExtension(path)) {
47281
+ case 'zip':
47282
+ t = 'application/zip';
47283
+ break;
47284
+ case 'vsf':
47285
+ t = 'text/plain';
47286
+ }
47287
+ fetchAndSet("data:".concat(t, ";base64,").concat(base64Data), path);
47288
+ };
47289
+ var fetchAndSet = function (url, path) {
47290
+ if (path === void 0) { path = undefined; }
47291
+ fetch(url)
47292
+ .then(function (response) { return response.blob()
47293
+ .then(function (blob) {
47294
+ var t = blob.type;
47295
+ if (!allowedFileTypes.includes(t)) {
47296
+ console.error("Cloud Artifact ".concat(t, " not supported."));
47297
+ setPreview(undefined);
47298
+ setCurrBlob(undefined);
47299
+ setCurrFileExtension(undefined);
47300
+ return;
47301
+ }
47302
+ switch (t) {
47303
+ case 'application/zip':
47304
+ parser['application/zip'](blob);
47305
+ break;
47306
+ case 'text/plain':
47307
+ parser['text/plain'](blob);
47308
+ break;
47309
+ default:
47310
+ setPreview(undefined);
47311
+ setCurrBlob(undefined);
47312
+ setCurrFileExtension(undefined);
47313
+ break;
47314
+ }
47315
+ setCurrBlob(blob);
47316
+ if (path) {
47317
+ setSelFilePath(path);
47318
+ }
47319
+ var ext = getExtension((selArtifact === null || selArtifact === void 0 ? void 0 : selArtifact.file_name) || path);
47320
+ setCurrFileExtension(ext);
47321
+ }); });
47322
+ };
47250
47323
  var download = function (blob, fileName) {
47251
47324
  var file = new File([blob], fileName);
47252
47325
  var a = document.createElement('a');
@@ -47259,54 +47332,31 @@ var FilePreview = function (_a) {
47259
47332
  a.click();
47260
47333
  };
47261
47334
  React.useEffect(function () {
47335
+ if (enableFilePicker) {
47336
+ base64AndFetch(selFilePath);
47337
+ return;
47338
+ }
47262
47339
  downloadArtifact(selArtifact === null || selArtifact === void 0 ? void 0 : selArtifact.key, jobId)
47263
- .then(function (url) {
47264
- fetch(url)
47265
- .then(function (response) { return response.blob()
47266
- .then(function (blob) {
47267
- var t = blob.type;
47268
- if (!allowedFileTypes.includes(t)) {
47269
- console.error("Cloud Artifact ".concat(t, " not supported."));
47270
- setPreview(undefined);
47271
- setCurrBlob(undefined);
47272
- setCurrFileExtension(undefined);
47273
- return;
47274
- }
47275
- switch (t) {
47276
- case 'application/zip':
47277
- parser['application/zip'](blob);
47278
- break;
47279
- case 'text/plain':
47280
- parser['text/plain'](blob);
47281
- break;
47282
- default:
47283
- setPreview(undefined);
47284
- setCurrBlob(undefined);
47285
- setCurrFileExtension(undefined);
47286
- break;
47287
- }
47288
- setCurrBlob(blob);
47289
- var ext = getExtension(selArtifact === null || selArtifact === void 0 ? void 0 : selArtifact.file_name);
47290
- setCurrFileExtension(ext);
47291
- }); });
47292
- });
47293
- }, [selArtifact, projectOwner, projectName]);
47340
+ .then(fetchAndSet);
47341
+ }, [selArtifact, selFilePath, projectOwner, projectName]);
47294
47342
  shortDebounce(function () {
47295
47343
  onPreviewChange && onPreviewChange(preview);
47296
47344
  }, [onPreviewChange, preview]);
47297
- // TODO: Add buttons latest part (e.g. download)
47298
47345
  return (React__default["default"].createElement(React__default["default"].Fragment, null,
47299
- !value && React__default["default"].createElement(SelectCloudArtifacts, { projectOwner: projectOwner, projectName: projectName, value: selArtifact, hidden: false, client: client, jobId: jobId, fileNameMatch: typeof inputProps.accept === 'string'
47346
+ !value && !enableFilePicker && React__default["default"].createElement(SelectCloudArtifacts, { projectOwner: projectOwner, projectName: projectName, value: selArtifact, hidden: false, client: client, jobId: jobId, fileNameMatch: typeof inputProps.accept === 'string'
47300
47347
  ? ".*(".concat(inputProps.accept.replace(/\./g, '').split(', ').join('$|'), "$)")
47301
47348
  : undefined, onChange: onChange }),
47302
- selArtifact &&
47349
+ !localPath && enableFilePicker && React__default["default"].createElement(SelectLocalArtifactNative, { onChange: onChangeLocal, value: selFilePath, buttonLabel: "Select ".concat(inputProps.accept.split(',').length > 1 ?
47350
+ 'any of' : 'an', " ").concat(inputProps.accept, " ").concat(inputProps.accept.split(',').length > 1 ? 'file types' : 'file', "."), fileMatchPattern: "File types ".concat(inputProps.accept, "|*").concat(inputProps.accept.split(', ').join(';*')) }),
47351
+ (selArtifact || selFilePath) && //
47303
47352
  React__default["default"].createElement(React__default["default"].Fragment, null,
47353
+ (value || localPath) ? undefined : React__default["default"].createElement("br", null),
47304
47354
  (host !== 'web' && currFileExtension === 'vsf'
47305
47355
  && typeof preview === 'string') &&
47306
- React__default["default"].createElement(SendResults, { results: JSON.parse(preview), defaultKey: selArtifact.file_name, buttonLabel: 'Result Preview' }),
47356
+ React__default["default"].createElement(SendResults, { results: JSON.parse(preview), defaultKey: (selArtifact === null || selArtifact === void 0 ? void 0 : selArtifact.file_name) || (selFilePath === null || selFilePath === void 0 ? void 0 : selFilePath.replace(/^.*[\\\/]/, '')), buttonLabel: 'Result Preview' }),
47307
47357
  (host !== 'web' && currFileExtension === 'zip') &&
47308
47358
  preview && typeof preview === 'string' &&
47309
- React__default["default"].createElement(SendResults, { results: JSON.parse(preview), defaultKey: selArtifact.file_name, buttonLabel: 'Result Preview' }),
47359
+ React__default["default"].createElement(SendResults, { results: JSON.parse(preview), defaultKey: (selArtifact === null || selArtifact === void 0 ? void 0 : selArtifact.file_name) || (selFilePath === null || selFilePath === void 0 ? void 0 : selFilePath.replace(/^.*[\\\/]/, '')), buttonLabel: 'Result Preview' }),
47310
47360
  (host === 'web') &&
47311
47361
  React__default["default"].createElement(Button, { type: 'button', onClick: function () { return download(currBlob, selArtifact.file_name); }, disabled: !currBlob, style: {
47312
47362
  width: 'fit-content',