pollination-react-io 1.24.1 → 1.24.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.
@@ -1,9 +1,8 @@
1
- import type { UserPrivate } from '@pollination-solutions/pollination-sdk';
1
+ import type { Project, RecipeInterface, UserPrivate } from '@pollination-solutions/pollination-sdk';
2
2
  import { CSSProperties } from 'react';
3
3
  import { APIClient } from '../hooks';
4
+ import { Account } from '../SelectAccount/SelectAccount.types';
4
5
  export declare type CreateStudyProps = {
5
- authUser?: UserPrivate;
6
- client?: APIClient;
7
6
  style?: CSSProperties;
8
7
  controlledRecipeInputs?: {
9
8
  [index: string]: {
@@ -11,5 +10,10 @@ export declare type CreateStudyProps = {
11
10
  hidden?: boolean;
12
11
  };
13
12
  };
13
+ defaultAccount?: Account;
14
+ defaultProject?: Project;
15
+ defaultRecipe?: RecipeInterface;
14
16
  createStudySuccess?: (accountName: string, projectName: string, studyId: string) => void;
17
+ authUser?: UserPrivate;
18
+ client?: APIClient;
15
19
  };
@@ -8702,6 +8702,8 @@ var ComboBox = React__default.forwardRef(function ComboBox(_a, ref) {
8702
8702
  borderBottomLeftRadius: isOpen ? 0 : 4,
8703
8703
  flex: 12,
8704
8704
  lineHeight: '1.5rem',
8705
+ }, onReset: function () {
8706
+ selectItem(undefined);
8705
8707
  } }, inputProps), { onFocus: function () {
8706
8708
  openMenu();
8707
8709
  }, type: hidden ? 'hidden' : undefined })))),
@@ -14380,7 +14382,7 @@ Dropzone.propTypes = {
14380
14382
  * @property {Function} open Open the native file selection dialog
14381
14383
  */
14382
14384
 
14383
- var initialState$1 = {
14385
+ var initialState = {
14384
14386
  isFocused: false,
14385
14387
  isFileDialogActive: false,
14386
14388
  isDragActive: false,
@@ -14515,7 +14517,7 @@ function useDropzone() {
14515
14517
  var rootRef = useRef(null);
14516
14518
  var inputRef = useRef(null);
14517
14519
 
14518
- var _useReducer = useReducer(reducer, initialState$1),
14520
+ var _useReducer = useReducer(reducer, initialState),
14519
14521
  _useReducer2 = _slicedToArray(_useReducer, 2),
14520
14522
  state = _useReducer2[0],
14521
14523
  dispatch = _useReducer2[1];
@@ -14965,7 +14967,7 @@ function reducer(state, action) {
14965
14967
  });
14966
14968
 
14967
14969
  case "openDialog":
14968
- return _objectSpread(_objectSpread({}, initialState$1), {}, {
14970
+ return _objectSpread(_objectSpread({}, initialState), {}, {
14969
14971
  isFileDialogActive: true
14970
14972
  });
14971
14973
 
@@ -14988,7 +14990,7 @@ function reducer(state, action) {
14988
14990
  });
14989
14991
 
14990
14992
  case "reset":
14991
- return _objectSpread({}, initialState$1);
14993
+ return _objectSpread({}, initialState);
14992
14994
 
14993
14995
  default:
14994
14996
  return state;
@@ -37873,9 +37875,9 @@ function blobToBase64(blob) {
37873
37875
  if (typeof reader.result !== 'string') {
37874
37876
  return;
37875
37877
  }
37876
- resolve(btoa(reader.result));
37878
+ resolve(reader.result.split(',')[1]);
37877
37879
  };
37878
- reader.readAsText(blob);
37880
+ reader.readAsDataURL(blob);
37879
37881
  })];
37880
37882
  });
37881
37883
  });
@@ -38096,14 +38098,16 @@ var useCreateStudy = function (accountName, projectName, client) {
38096
38098
  var input = recipe.inputs.find(function (i) { return i.name === d[0]; });
38097
38099
  return processEntryLocal(d, input, cloudProjectName);
38098
38100
  }))
38099
- .then(function (jobArguments) { return ({
38100
- type: 'Job',
38101
- api_version: 'v1beta1',
38102
- name: name,
38103
- description: description,
38104
- source: recipe.source,
38105
- arguments: [jobArguments]
38106
- }); }).catch(function (err) {
38101
+ .then(function (jobArguments) {
38102
+ return ({
38103
+ type: 'Job',
38104
+ api_version: 'v1beta1',
38105
+ name: name,
38106
+ description: description,
38107
+ source: recipe.source,
38108
+ arguments: [jobArguments]
38109
+ });
38110
+ }).catch(function (err) {
38107
38111
  var data = err.response.data;
38108
38112
  console.error(data.detail);
38109
38113
  })];
@@ -38121,7 +38125,6 @@ var useCreateStudy = function (accountName, projectName, client) {
38121
38125
  console.log(jobInfo);
38122
38126
  response = window.parent.chrome.webview.hostObjects.study.RunSimulation(JSON.stringify(jobInfo))
38123
38127
  .then(function (value) {
38124
- console.log(value);
38125
38128
  onSuccess && onSuccess(cloudProjectOwner, cloudProjectName, value);
38126
38129
  }, function (reason) {
38127
38130
  console.error(reason);
@@ -40658,7 +40661,8 @@ var SelectCloudArtifacts = function (_a) {
40658
40661
  }, [selArtifact]);
40659
40662
  useEffect(function () {
40660
40663
  // nonmemoized value from react-hook-form or other parent causes infinite rerendering
40661
- if (lodash_isequal(valueRef.current, selArtifact)) {
40664
+ if (lodash_isequal(valueRef.current, selArtifact) ||
40665
+ (!valueRef.current && !selArtifact)) {
40662
40666
  return;
40663
40667
  }
40664
40668
  // if selection is a folder instead of an artifact
@@ -40788,7 +40792,7 @@ var SelectLocalArtifactNative = function (_a) {
40788
40792
  }
40789
40793
  catch (error) {
40790
40794
  // common error is incorrect fileMatchPattern
40791
- console.log(error);
40795
+ console.error(error);
40792
40796
  }
40793
40797
  if (res && typeof res.data === 'string') {
40794
40798
  setSelPath(res.data);
@@ -44046,8 +44050,8 @@ var RecipeInputsForm = function (_a) {
44046
44050
  var host = getHost();
44047
44051
  var _f = useForm({
44048
44052
  resolver: Oe(schema),
44049
- mode: 'all'
44050
- }), control = _f.control, register = _f.register, handleSubmit = _f.handleSubmit, reset = _f.reset, resetField = _f.resetField, _g = _f.formState, errors = _g.errors, isValid = _g.isValid; _g.isSubmitting;
44053
+ mode: 'all',
44054
+ }), control = _f.control, register = _f.register, handleSubmit = _f.handleSubmit, reset = _f.reset, resetField = _f.resetField, _g = _f.formState, errors = _g.errors, isValid = _g.isValid, isSubmitSuccessful = _g.isSubmitSuccessful;
44051
44055
  var _onSubmit = function (_data) {
44052
44056
  var data = __assign({}, _data);
44053
44057
  // strip study name
@@ -44069,6 +44073,14 @@ var RecipeInputsForm = function (_a) {
44069
44073
  setLoading(true);
44070
44074
  onSubmit(studyName, data, 'description', localConfig)
44071
44075
  .finally(function () {
44076
+ // @ts-ignore
44077
+ var defaults = recipe.inputs.map(function (input) {
44078
+ var _a;
44079
+ var _b;
44080
+ return (_a = {}, _a[input.name] = (_b = input.default) !== null && _b !== void 0 ? _b : '', _a);
44081
+ });
44082
+ defaults.push({ 'study-name': '' });
44083
+ // console.log(defaults)
44072
44084
  reset();
44073
44085
  setLoading(false);
44074
44086
  });
@@ -44089,7 +44101,7 @@ var RecipeInputsForm = function (_a) {
44089
44101
  gap: 20
44090
44102
  } },
44091
44103
  React__default.createElement(FormInput, { name: 'study-name', description: 'Study name is a required field.', errorMessage: errors['study-name'] ? (_b = errors['study-name']) === null || _b === void 0 ? void 0 : _b.message : undefined },
44092
- React__default.createElement(TextInput, { inputProps: __assign({ form: recipe.metadata.name }, register('study-name')), reset: function () { return resetField('study-name'); } })),
44104
+ React__default.createElement(TextInput, { inputProps: __assign({ form: recipe.metadata.name }, register('study-name')) })),
44093
44105
  host !== 'web' &&
44094
44106
  React__default.createElement(ConfigureLocalRun, { onChange: function (localConfig) { return setLocalConfig(localConfig); }, defaultVal: localConfig }),
44095
44107
  React__default.createElement(Tabs, { forceRenderTabPanel: true },
@@ -44131,7 +44143,7 @@ var RecipeInputsForm = function (_a) {
44131
44143
  get_model: input.extensions.includes('hbjson') && host !== 'web',
44132
44144
  get_local: host !== 'web',
44133
44145
  get_file: host === 'web'
44134
- }, value: value, onChange: onChange, client: client, inputProps: __assign(__assign({}, field), { accept: input.extensions.map(function (e) { return ".".concat(e); }).join(', ') }), hidden: hidden }));
44146
+ }, value: value, onChange: onChange, inputProps: __assign(__assign({}, field), { accept: input.extensions.map(function (e) { return ".".concat(e); }).join(', ') }), hidden: hidden, client: client }));
44135
44147
  } });
44136
44148
  case 'DAGStringInput':
44137
44149
  return typeof ((_a = input.spec) === null || _a === void 0 ? void 0 : _a.enum) !== 'undefined' ?
@@ -44163,7 +44175,7 @@ var RecipeInputsForm = function (_a) {
44163
44175
  // @ts-ignore
44164
44176
  React__default.createElement("li", { key: key, style: { color: 'red', fontSize: '0.8rem', listStyle: 'none' } }, "".concat(key, " ").concat(val.message, ".")));
44165
44177
  }))) :
44166
- 'Recipe input isn\'t valid yet.' },
44178
+ isSubmitSuccessful ? 'Study has been successfully submitted.' : 'Study input isn\'t valid.' },
44167
44179
  React__default.createElement(Button, { type: 'submit', form: recipe.metadata.name, disabled: !isValid || loading, style: {
44168
44180
  width: 'fit-content',
44169
44181
  }, loading: loading }, "Create Study"))))));
@@ -44172,11 +44184,6 @@ var RecipeInputsForm = function (_a) {
44172
44184
  var css_248z$3 = ".react-tabs {\n -webkit-tap-highlight-color: transparent;\n}\n\n.react-tabs__tab-list {\n border-bottom: 1px solid #aaa;\n margin: 0 0 10px;\n padding: 0;\n}\n\n.react-tabs__tab {\n display: inline-block;\n border: 1px solid transparent;\n border-bottom: none;\n bottom: -1px;\n position: relative;\n list-style: none;\n padding: 6px 12px;\n cursor: pointer;\n}\n\n.react-tabs__tab--selected {\n background: #fff;\n border-color: #aaa;\n color: black;\n border-radius: 5px 5px 0 0;\n}\n\n.react-tabs__tab--disabled {\n color: GrayText;\n cursor: default;\n}\n\n.react-tabs__tab:focus {\n outline: none;\n}\n\n.react-tabs__tab:focus:after {\n content: '';\n position: absolute;\n height: 5px;\n left: -4px;\n right: -4px;\n bottom: -5px;\n background: #fff;\n}\n\n.react-tabs__tab-panel {\n display: none;\n}\n\n.react-tabs__tab-panel--selected {\n display: block;\n}\n";
44173
44185
  styleInject(css_248z$3);
44174
44186
 
44175
- var initialState = {
44176
- account: undefined,
44177
- project: undefined,
44178
- recipe: undefined,
44179
- };
44180
44187
  var defaultStyle = {
44181
44188
  display: 'flex',
44182
44189
  flexDirection: 'column',
@@ -44184,27 +44191,20 @@ var defaultStyle = {
44184
44191
  };
44185
44192
  var CreateStudy = function (_a) {
44186
44193
  var _b;
44187
- var authUser = _a.authUser, client = _a.client, style = _a.style, controlledRecipeInputs = _a.controlledRecipeInputs, createStudySuccess = _a.createStudySuccess;
44194
+ var style = _a.style, controlledRecipeInputs = _a.controlledRecipeInputs, defaultAccount = _a.defaultAccount, defaultProject = _a.defaultProject, defaultRecipe = _a.defaultRecipe, createStudySuccess = _a.createStudySuccess, authUser = _a.authUser, client = _a.client;
44188
44195
  var _c = useState(0), activeTabIndex = _c[0], setActiveTabIndex = _c[1];
44189
- var _d = useState(initialState), state = _d[0], setState = _d[1];
44190
- var setSelAccount = useCallback(function (account) {
44191
- setState(function (state) { return (__assign(__assign({}, state), { account: account, project: undefined })); });
44192
- }, []);
44193
- var setSelProject = useCallback(function (project) {
44194
- setState(function (state) { return (__assign(__assign({}, state), { project: project, recipe: undefined })); });
44195
- }, []);
44196
- var setSelRecipe = useCallback(function (recipe) {
44197
- setState(function (state) { return (__assign(__assign({}, state), { recipe: recipe })); });
44198
- }, []);
44196
+ var _d = useState(defaultAccount), selAccount = _d[0], setSelAccount = _d[1];
44197
+ var _e = useState(defaultProject), selProject = _e[0], setSelProject = _e[1];
44198
+ var _f = useState(defaultRecipe), selRecipe = _f[0], setSelRecipe = _f[1];
44199
44199
  // @ts-ignore
44200
- var projectOwner = !state || !state.account ? undefined : ((_b = state.account.username) !== null && _b !== void 0 ? _b : state.account.account_name);
44201
- var projectSlug = !state || !state.project ? undefined : state.project.slug.split('/')[1];
44202
- var _e = useCreateStudy(projectOwner, projectSlug, client), host = _e.host, createStudy = _e.createStudy, createLocalStudy = _e.createLocalStudy;
44200
+ var projectOwner = selAccount ? ((_b = selAccount.username) !== null && _b !== void 0 ? _b : selAccount.account_name) : undefined;
44201
+ var projectSlug = selProject ? selProject.slug.split('/')[1] : undefined;
44202
+ var _g = useCreateStudy(projectOwner, projectSlug, client), host = _g.host, createStudy = _g.createStudy, createLocalStudy = _g.createLocalStudy;
44203
44203
  useEffect(function () {
44204
- if (!state.recipe)
44204
+ if (!selRecipe)
44205
44205
  return;
44206
44206
  setActiveTabIndex(1);
44207
- }, [state.recipe]);
44207
+ }, [selRecipe]);
44208
44208
  var basePath = useMemo(function () {
44209
44209
  return client.config.basePath.replace('api', 'app');
44210
44210
  }, [client]);
@@ -44216,19 +44216,19 @@ var CreateStudy = function (_a) {
44216
44216
  window.open("".concat(basePath, "/").concat(accountName, "/projects/").concat(projectName, "/studies/").concat(studyId));
44217
44217
  }, [basePath]);
44218
44218
  var handleCreateStudy = useCallback(function (name, data, description, localConfig) {
44219
- if (!state || !state.recipe || !state.recipe.source) {
44219
+ if (!selRecipe) {
44220
44220
  return new Promise(function (resolve, reject) { return resolve(); });
44221
44221
  }
44222
44222
  var handleSuccess = createStudySuccess !== null && createStudySuccess !== void 0 ? createStudySuccess : handleCreateStudySuccess;
44223
44223
  // don't attempt navigation if the study is a local study
44224
44224
  var handleWebSuccess = localConfig && localConfig.isLocalJob ? handleSuccess : undefined;
44225
44225
  if (host !== 'web') {
44226
- return createLocalStudy({ name: name, recipe: state.recipe, description: description }, data, localConfig, handleWebSuccess);
44226
+ return createLocalStudy({ name: name, recipe: selRecipe, description: description }, data, localConfig, handleWebSuccess);
44227
44227
  }
44228
44228
  else {
44229
- return createStudy({ name: name, recipe: state.recipe, description: description }, data, handleWebSuccess);
44229
+ return createStudy({ name: name, recipe: selRecipe, description: description }, data, handleWebSuccess);
44230
44230
  }
44231
- }, [state, host, createLocalStudy, createStudy, createStudySuccess, handleCreateStudySuccess]);
44231
+ }, [createLocalStudy, createStudy, createStudySuccess, handleCreateStudySuccess, host, selRecipe]);
44232
44232
  return (React__default.createElement("div", { "data-testid": "CreateProject", style: __assign(__assign({}, defaultStyle), style) },
44233
44233
  React__default.createElement(Tabs, { selectedIndex: activeTabIndex, onSelect: function (index) { return setActiveTabIndex(index); }, forceRenderTabPanel: true },
44234
44234
  React__default.createElement("div", { style: {
@@ -44241,7 +44241,7 @@ var CreateStudy = function (_a) {
44241
44241
  flex: 1
44242
44242
  } },
44243
44243
  React__default.createElement(Tab, null, "Select Recipe"),
44244
- state.recipe &&
44244
+ selRecipe &&
44245
44245
  React__default.createElement(Tab, null, "Recipe Inputs"))),
44246
44246
  React__default.createElement(TabPanel, { style: {
44247
44247
  padding: '8px 8px'
@@ -44251,14 +44251,14 @@ var CreateStudy = function (_a) {
44251
44251
  flexDirection: 'column',
44252
44252
  gap: 8
44253
44253
  } },
44254
- React__default.createElement(Label, { label: state.account ? state.account.name : 'Account' },
44255
- React__default.createElement(SelectAccount, { authUser: authUser, client: client, onChange: setSelAccount })),
44256
- React__default.createElement(Label, { label: state.project ? state.project.name : 'Project' },
44257
- React__default.createElement(SelectProject, { authUser: authUser, client: client, onChange: setSelProject, projectOwner: projectOwner })),
44258
- React__default.createElement(Label, { label: state.recipe && state.recipe.metadata ?
44259
- state.recipe.metadata.name : 'Recipe' },
44260
- React__default.createElement(SelectRecipe, { authUser: authUser, client: client, projectOwner: projectOwner, projectName: state.project ? state === null || state === void 0 ? void 0 : state.project.name : undefined, onChange: setSelRecipe })))),
44261
- state.recipe &&
44254
+ React__default.createElement(Label, { label: selAccount ? selAccount.name : 'Account' },
44255
+ React__default.createElement(SelectAccount, { authUser: authUser, client: client, onChange: setSelAccount, value: selAccount })),
44256
+ React__default.createElement(Label, { label: selProject ? selProject.name : 'Project' },
44257
+ React__default.createElement(SelectProject, { authUser: authUser, client: client, onChange: setSelProject, projectOwner: projectOwner, value: selProject })),
44258
+ React__default.createElement(Label, { label: selRecipe && selRecipe.metadata ?
44259
+ selRecipe.metadata.name : 'Recipe' },
44260
+ React__default.createElement(SelectRecipe, { authUser: authUser, client: client, projectOwner: projectOwner, projectName: selProject ? selProject.name : undefined, onChange: setSelRecipe, value: selRecipe })))),
44261
+ selRecipe &&
44262
44262
  React__default.createElement(React__default.Fragment, null,
44263
44263
  React__default.createElement(TabPanel, { style: {
44264
44264
  padding: 8
@@ -44268,14 +44268,14 @@ var CreateStudy = function (_a) {
44268
44268
  flexDirection: 'column',
44269
44269
  gap: 24
44270
44270
  } },
44271
- state.recipe &&
44271
+ selRecipe &&
44272
44272
  React__default.createElement("h5", { style: {
44273
44273
  marginBottom: 0
44274
- } }, state.recipe.metadata.name
44274
+ } }, selRecipe.metadata.name
44275
44275
  .split('-')
44276
44276
  .map(function (v) { return v.charAt(0).toUpperCase() + v.slice(1); })
44277
44277
  .join(' ')),
44278
- React__default.createElement(RecipeInputsForm, { client: client, projectOwner: projectOwner, projectName: projectSlug, recipe: state.recipe, onSubmit: handleCreateStudy, controlledValues: controlledRecipeInputs })))))));
44278
+ React__default.createElement(RecipeInputsForm, { client: client, projectOwner: projectOwner, projectName: projectSlug, recipe: selRecipe, onSubmit: handleCreateStudy, controlledValues: controlledRecipeInputs })))))));
44279
44279
  };
44280
44280
 
44281
44281
  // Generated with util/create-component.js