{"version":3,"file":"js/rescript-bundles-dashboard-edit-product-assets-tab-9dea8cb3e09e677246ee.chunk.js","mappings":"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","sources":["webpack://datacenters/./client/app/rescript/bindings/CloudinaryWidget.res.js","webpack://datacenters/./client/app/rescript/bundles/common/dashboard/DashboardProductEditorAssetsTab.res.js","webpack://datacenters/./client/app/rescript/api/products/requests/CreateProductsImageRequest.res.js","webpack://datacenters/./client/app/rescript/api/products/requests/CreateProductsVideoRequest.res.js","webpack://datacenters/./client/app/rescript/api/products/requests/UpdateProductsImageRequest.res.js","webpack://datacenters/./client/app/rescript/api/products/requests/UpdateProductsVideoRequest.res.js","webpack://datacenters/./client/app/rescript/api/products/Api_Product.res.js","webpack://datacenters/./client/app/rescript/api/products/requests/DeleteProductsImageRequest.res.js","webpack://datacenters/./client/app/rescript/api/products/requests/DeleteProductsVideoRequest.res.js","webpack://datacenters/./client/app/rescript/bundles/common/dashboard/DashboardProductEditorImageForm.res.js","webpack://datacenters/./client/app/rescript/bundles/common/dashboard/DashboardProductEditorVideoForm.res.js","webpack://datacenters/./client/app/rescript/bundles/common/dashboard/DashboardProductEditorAssetsTabVideoLinkForm.res.js","webpack://datacenters/./client/app/rescript/bundles/common/dashboard/DashboardProductEditorAssetsTabUploader.res.js","webpack://datacenters/./client/app/rescript/bundles/dashboard-edit-product/assets-tab/DashboardEditProductAssetsTab.res.js","webpack://datacenters/./client/app/rescript/bundles/dashboard-edit-product/assets-tab/index.js","webpack://datacenters/./client/app/rescript/libs/Regex.res.js","webpack://datacenters/./client/app/rescript/styleguide/components/Heading/H3.res.js","webpack://datacenters/./client/app/rescript/styleguide/forms/Form/Form.res.js","webpack://datacenters/./client/app/rescript/styleguide/components/Image/ImageWithFallback.res.js","webpack://datacenters/./client/app/rescript/styleguide/forms/Picture/Picture.res.js"],"sourcesContent":["// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Belt_Result from \"rescript/lib/es6/belt_Result.js\";\nimport * as Json$JsonCombinators from \"@glennsl/rescript-json-combinators/src/Json.res.js\";\nimport * as Json_Decode$JsonCombinators from \"@glennsl/rescript-json-combinators/src/Json_Decode.res.js\";\n\nvar Loader = {};\n\nvar decoder = Json_Decode$JsonCombinators.object(function (field) {\n      return {\n              assetId: field.required(\"asset_id\", Json_Decode$JsonCombinators.string),\n              batchId: field.required(\"batchId\", Json_Decode$JsonCombinators.string),\n              bytes: field.required(\"bytes\", Json_Decode$JsonCombinators.$$int),\n              createdAt: field.required(\"created_at\", Json_Decode$JsonCombinators.string),\n              etag: field.required(\"etag\", Json_Decode$JsonCombinators.string),\n              folder: field.required(\"folder\", Json_Decode$JsonCombinators.string),\n              format: field.required(\"format\", Json_Decode$JsonCombinators.string),\n              height: field.required(\"height\", Json_Decode$JsonCombinators.$$int),\n              id: field.required(\"id\", Json_Decode$JsonCombinators.string),\n              originalFilename: field.required(\"original_filename\", Json_Decode$JsonCombinators.string),\n              path: field.required(\"path\", Json_Decode$JsonCombinators.string),\n              placeholder: field.required(\"placeholder\", Json_Decode$JsonCombinators.bool),\n              publicId: field.required(\"public_id\", Json_Decode$JsonCombinators.string),\n              resourceType: field.required(\"resource_type\", Json_Decode$JsonCombinators.string),\n              secureUrl: field.required(\"secure_url\", Json_Decode$JsonCombinators.string),\n              signature: field.required(\"signature\", Json_Decode$JsonCombinators.string),\n              tags: field.required(\"tags\", Json_Decode$JsonCombinators.array(Json_Decode$JsonCombinators.string)),\n              thumbnailUrl: field.required(\"thumbnail_url\", Json_Decode$JsonCombinators.string),\n              type_: field.required(\"type\", Json_Decode$JsonCombinators.string),\n              url: field.required(\"url\", Json_Decode$JsonCombinators.string),\n              version: field.required(\"version\", Json_Decode$JsonCombinators.$$int),\n              versionId: field.required(\"version_id\", Json_Decode$JsonCombinators.string),\n              width: field.required(\"width\", Json_Decode$JsonCombinators.$$int)\n            };\n    });\n\nfunction fromJson(json) {\n  return Belt_Result.getExn(Json$JsonCombinators.decode(json, decoder));\n}\n\nvar Info = {\n  decoder: decoder,\n  fromJson: fromJson\n};\n\nvar decoder$1 = Json_Decode$JsonCombinators.object(function (field) {\n      return {\n              event: field.required(\"event\", Json_Decode$JsonCombinators.string),\n              info: field.required(\"info\", decoder)\n            };\n    });\n\nfunction fromJson$1(json) {\n  return Belt_Result.getExn(Json$JsonCombinators.decode(json, decoder$1));\n}\n\nexport {\n  Loader ,\n  Info ,\n  decoder$1 as decoder,\n  fromJson$1 as fromJson,\n}\n/* decoder Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as H2 from \"../../../styleguide/components/Heading/H2.res.js\";\nimport * as Container from \"../../../styleguide/components/Container/Container.res.js\";\nimport * as JsxRuntime from \"react/jsx-runtime\";\nimport * as DashboardProductEditorScss from \"./DashboardProductEditor.scss\";\n\nvar css = DashboardProductEditorScss;\n\nfunction DashboardProductEditorAssetsTab(props) {\n  return JsxRuntime.jsxs(Container.make, {\n              className: css.addAssetsContainer,\n              children: [\n                JsxRuntime.jsx(H2.make, {\n                      className: css.formTitle,\n                      children: \"Add Images & Videos\"\n                    }),\n                props.children\n              ]\n            });\n}\n\nvar make = DashboardProductEditorAssetsTab;\n\nexport {\n  css ,\n  make ,\n}\n/* css Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as ID from \"../../../libs/ID.res.js\";\nimport * as Rest from \"../../Rest.res.js\";\nimport * as ColocationProduct from \"../../../models/ColocationProduct.res.js\";\nimport * as Json_Encode$JsonCombinators from \"@glennsl/rescript-json-combinators/src/Json_Encode.res.js\";\n\nfunction toJson(req) {\n  return Json_Encode$JsonCombinators.object([\n              [\n                \"public_id\",\n                req.image.info.publicId\n              ],\n              [\n                \"id\",\n                req.image.info.id\n              ],\n              [\n                \"width\",\n                req.image.info.width\n              ],\n              [\n                \"height\",\n                req.image.info.height\n              ],\n              [\n                \"format\",\n                req.image.info.format\n              ]\n            ]);\n}\n\nvar Req = {\n  toJson: toJson\n};\n\nfunction exec(productId, image) {\n  return Rest.$$fetch(\"/dashboard/products/\" + (ID.toString(productId) + \"/images\"), {\n              NAME: \"Post\",\n              VAL: toJson(image)\n            }, {\n              NAME: \"Json\",\n              VAL: ColocationProduct.Draft.decoder\n            }, undefined, undefined);\n}\n\nexport {\n  Req ,\n  exec ,\n}\n/* ID Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as ID from \"../../../libs/ID.res.js\";\nimport * as Rest from \"../../Rest.res.js\";\nimport * as Video from \"../../../models/Video.res.js\";\nimport * as ColocationProduct from \"../../../models/ColocationProduct.res.js\";\nimport * as Json_Encode$JsonCombinators from \"@glennsl/rescript-json-combinators/src/Json_Encode.res.js\";\n\nfunction toJson(req) {\n  return Json_Encode$JsonCombinators.object([\n              [\n                \"public_id\",\n                req.video.info.publicId\n              ],\n              [\n                \"id\",\n                req.video.info.id\n              ],\n              [\n                \"width\",\n                req.video.info.width\n              ],\n              [\n                \"height\",\n                req.video.info.height\n              ],\n              [\n                \"format\",\n                req.video.info.format\n              ],\n              [\n                \"url\",\n                req.video.info.secureUrl\n              ],\n              [\n                \"source\",\n                Video.Source.toString(\"Cloudinary\")\n              ]\n            ]);\n}\n\nvar Req = {\n  toJson: toJson\n};\n\nfunction exec(productId, video) {\n  return Rest.$$fetch(\"/dashboard/products/\" + (ID.toString(productId) + \"/videos\"), {\n              NAME: \"Post\",\n              VAL: toJson(video)\n            }, {\n              NAME: \"Json\",\n              VAL: ColocationProduct.Draft.decoder\n            }, undefined, undefined);\n}\n\nexport {\n  Req ,\n  exec ,\n}\n/* ID Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as ID from \"../../../libs/ID.res.js\";\nimport * as Rest from \"../../Rest.res.js\";\nimport * as ColocationProduct from \"../../../models/ColocationProduct.res.js\";\nimport * as Json_Encode$JsonCombinators from \"@glennsl/rescript-json-combinators/src/Json_Encode.res.js\";\n\nfunction toJson(image) {\n  return Json_Encode$JsonCombinators.object([\n              [\n                \"description\",\n                image.description\n              ],\n              [\n                \"active\",\n                image.active\n              ]\n            ]);\n}\n\nvar Req = {\n  toJson: toJson\n};\n\nfunction exec(productId, imageId, image) {\n  return Rest.$$fetch(\"/dashboard/products/\" + (ID.toString(productId) + (\"/images/\" + ID.toString(imageId))), {\n              NAME: \"Patch\",\n              VAL: toJson(image)\n            }, {\n              NAME: \"Json\",\n              VAL: ColocationProduct.Draft.decoder\n            }, undefined, undefined);\n}\n\nexport {\n  Req ,\n  exec ,\n}\n/* ID Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as ID from \"../../../libs/ID.res.js\";\nimport * as Rest from \"../../Rest.res.js\";\nimport * as ColocationProduct from \"../../../models/ColocationProduct.res.js\";\nimport * as Json_Encode$JsonCombinators from \"@glennsl/rescript-json-combinators/src/Json_Encode.res.js\";\n\nfunction toJson(video) {\n  return Json_Encode$JsonCombinators.object([\n              [\n                \"description\",\n                video.description\n              ],\n              [\n                \"active\",\n                video.active\n              ]\n            ]);\n}\n\nvar Req = {\n  toJson: toJson\n};\n\nfunction exec(productId, videoId, video) {\n  return Rest.$$fetch(\"/dashboard/products/\" + (ID.toString(productId) + (\"/videos/\" + ID.toString(videoId))), {\n              NAME: \"Patch\",\n              VAL: toJson(video)\n            }, {\n              NAME: \"Json\",\n              VAL: ColocationProduct.Draft.decoder\n            }, undefined, undefined);\n}\n\nexport {\n  Req ,\n  exec ,\n}\n/* ID Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as CreateProductsImageRequest from \"./requests/CreateProductsImageRequest.res.js\";\nimport * as CreateProductsVideoRequest from \"./requests/CreateProductsVideoRequest.res.js\";\nimport * as DeleteProductsImageRequest from \"./requests/DeleteProductsImageRequest.res.js\";\nimport * as DeleteProductsVideoRequest from \"./requests/DeleteProductsVideoRequest.res.js\";\nimport * as UpdateProductsImageRequest from \"./requests/UpdateProductsImageRequest.res.js\";\nimport * as UpdateProductsVideoRequest from \"./requests/UpdateProductsVideoRequest.res.js\";\n\nvar createImage = CreateProductsImageRequest.exec;\n\nvar createVideo = CreateProductsVideoRequest.exec;\n\nvar deleteImage = DeleteProductsImageRequest.exec;\n\nvar deleteVideo = DeleteProductsVideoRequest.exec;\n\nvar updateImage = UpdateProductsImageRequest.exec;\n\nvar updateVideo = UpdateProductsVideoRequest.exec;\n\nexport {\n  createImage ,\n  createVideo ,\n  deleteImage ,\n  deleteVideo ,\n  updateImage ,\n  updateVideo ,\n}\n/* CreateProductsImageRequest Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as ID from \"../../../libs/ID.res.js\";\nimport * as Rest from \"../../Rest.res.js\";\nimport * as ColocationProduct from \"../../../models/ColocationProduct.res.js\";\n\nfunction exec(productId, imageId) {\n  return Rest.$$fetch(\"/dashboard/products/\" + (ID.toString(productId) + (\"/images/\" + ID.toString(imageId))), {\n              NAME: \"Delete\",\n              VAL: undefined\n            }, {\n              NAME: \"Json\",\n              VAL: ColocationProduct.Draft.decoder\n            }, undefined, undefined);\n}\n\nexport {\n  exec ,\n}\n/* ID Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as ID from \"../../../libs/ID.res.js\";\nimport * as Rest from \"../../Rest.res.js\";\nimport * as ColocationProduct from \"../../../models/ColocationProduct.res.js\";\n\nfunction exec(productId, videoId) {\n  return Rest.$$fetch(\"/dashboard/products/\" + (ID.toString(productId) + (\"/videos/\" + ID.toString(videoId))), {\n              NAME: \"Delete\",\n              VAL: undefined\n            }, {\n              NAME: \"Json\",\n              VAL: ColocationProduct.Draft.decoder\n            }, undefined, undefined);\n}\n\nexport {\n  exec ,\n}\n/* ID Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Cx from \"rescript-classnames/src/Cx.res.js\";\nimport * as ID from \"../../../libs/ID.res.js\";\nimport * as React from \"react\";\nimport * as Toggle from \"../../../styleguide/forms/Toggle/Toggle.res.js\";\nimport * as Picture from \"../../../styleguide/forms/Picture/Picture.res.js\";\nimport * as $$Promise from \"../../../bindings/Promise.res.js\";\nimport * as Caml_obj from \"rescript/lib/es6/caml_obj.js\";\nimport * as Js_array from \"rescript/lib/es6/js_array.js\";\nimport * as Formality from \"re-formality/src/Formality.res.js\";\nimport * as TextField from \"../../../styleguide/forms/TextField/TextField.res.js\";\nimport * as IconDelete from \"../../../styleguide/icons/IconDelete.res.js\";\nimport * as Api_Product from \"../../../api/products/Api_Product.res.js\";\nimport * as Belt_Option from \"rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"rescript/lib/es6/caml_option.js\";\nimport * as ErrorMessage from \"../../../styleguide/forms/ErrorMessage/ErrorMessage.res.js\";\nimport * as SentryLogger from \"../../../loggers/SentryLogger.res.js\";\nimport * as JsxRuntime from \"react/jsx-runtime\";\nimport * as Formality__ReactUpdate from \"re-formality/src/Formality__ReactUpdate.res.js\";\nimport * as DashboardProductEditorScss from \"./DashboardProductEditor.scss\";\n\nvar css = DashboardProductEditorScss;\n\nvar validators = {\n  description: undefined,\n  active: undefined,\n  url: undefined\n};\n\nfunction initialFieldsStatuses(_input) {\n  return {\n          description: \"Pristine\",\n          active: \"Pristine\",\n          url: \"Pristine\"\n        };\n}\n\nfunction initialState(input) {\n  return {\n          input: input,\n          fieldsStatuses: {\n            description: \"Pristine\",\n            active: \"Pristine\",\n            url: \"Pristine\"\n          },\n          collectionsStatuses: undefined,\n          formStatus: \"Editing\",\n          submissionStatus: \"NeverSubmitted\"\n        };\n}\n\nfunction validateForm(input, param, param$1) {\n  var match_0 = {\n    TAG: \"Ok\",\n    _0: input.description\n  };\n  var match_0$1 = {\n    TAG: \"Ok\",\n    _0: input.active\n  };\n  var match_0$2 = {\n    TAG: \"Ok\",\n    _0: input.url\n  };\n  var descriptionResult = match_0;\n  var descriptionResult$1;\n  if (descriptionResult.TAG === \"Ok\") {\n    var activeResult = match_0$1;\n    if (activeResult.TAG === \"Ok\") {\n      var urlResult = match_0$2;\n      if (urlResult.TAG === \"Ok\") {\n        return {\n                TAG: \"Valid\",\n                output: {\n                  description: descriptionResult._0,\n                  active: activeResult._0,\n                  url: urlResult._0\n                },\n                fieldsStatuses: {\n                  description: {\n                    TAG: \"Dirty\",\n                    _0: descriptionResult,\n                    _1: \"Hidden\"\n                  },\n                  active: {\n                    TAG: \"Dirty\",\n                    _0: activeResult,\n                    _1: \"Hidden\"\n                  },\n                  url: {\n                    TAG: \"Dirty\",\n                    _0: urlResult,\n                    _1: \"Hidden\"\n                  }\n                },\n                collectionsStatuses: undefined\n              };\n      }\n      descriptionResult$1 = descriptionResult;\n    } else {\n      descriptionResult$1 = descriptionResult;\n    }\n  } else {\n    descriptionResult$1 = descriptionResult;\n  }\n  return {\n          TAG: \"Invalid\",\n          fieldsStatuses: {\n            description: {\n              TAG: \"Dirty\",\n              _0: descriptionResult$1,\n              _1: \"Hidden\"\n            },\n            active: {\n              TAG: \"Dirty\",\n              _0: match_0$1,\n              _1: \"Hidden\"\n            },\n            url: {\n              TAG: \"Dirty\",\n              _0: match_0$2,\n              _1: \"Hidden\"\n            }\n          },\n          collectionsStatuses: undefined\n        };\n}\n\nfunction useForm(initialInput, onSubmit) {\n  var memoizedInitialState = React.useMemo((function () {\n          return initialState(initialInput);\n        }), [initialInput]);\n  var match = Formality__ReactUpdate.useReducer(memoizedInitialState, (function (state, action) {\n          if (typeof action !== \"object\") {\n            switch (action) {\n              case \"BlurDescriptionField\" :\n                  var result = Formality.validateFieldOnBlurWithoutValidator(state.input.description, state.fieldsStatuses.description, (function (status) {\n                          var init = state.fieldsStatuses;\n                          return {\n                                  description: status,\n                                  active: init.active,\n                                  url: init.url\n                                };\n                        }));\n                  if (result !== undefined) {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: result,\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: state.formStatus,\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  } else {\n                    return \"NoUpdate\";\n                  }\n              case \"BlurActiveField\" :\n                  var result$1 = Formality.validateFieldOnBlurWithoutValidator(state.input.active, state.fieldsStatuses.active, (function (status) {\n                          var init = state.fieldsStatuses;\n                          return {\n                                  description: init.description,\n                                  active: status,\n                                  url: init.url\n                                };\n                        }));\n                  if (result$1 !== undefined) {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: result$1,\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: state.formStatus,\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  } else {\n                    return \"NoUpdate\";\n                  }\n              case \"BlurUrlField\" :\n                  var result$2 = Formality.validateFieldOnBlurWithoutValidator(state.input.url, state.fieldsStatuses.url, (function (status) {\n                          var init = state.fieldsStatuses;\n                          return {\n                                  description: init.description,\n                                  active: init.active,\n                                  url: status\n                                };\n                        }));\n                  if (result$2 !== undefined) {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: result$2,\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: state.formStatus,\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  } else {\n                    return \"NoUpdate\";\n                  }\n              case \"Submit\" :\n                  var match = state.formStatus;\n                  if (typeof match === \"object\" && match.TAG === \"Submitting\") {\n                    return \"NoUpdate\";\n                  }\n                  var match$1 = validateForm(state.input, validators, state.fieldsStatuses);\n                  if (match$1.TAG !== \"Valid\") {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: match$1.fieldsStatuses,\n                              collectionsStatuses: match$1.collectionsStatuses,\n                              formStatus: \"Editing\",\n                              submissionStatus: \"AttemptedToSubmit\"\n                            }\n                          };\n                  }\n                  var output = match$1.output;\n                  var error = state.formStatus;\n                  var tmp;\n                  tmp = typeof error !== \"object\" || error.TAG !== \"SubmissionFailed\" ? undefined : Caml_option.some(error._0);\n                  return {\n                          TAG: \"UpdateWithSideEffects\",\n                          _0: {\n                            input: state.input,\n                            fieldsStatuses: match$1.fieldsStatuses,\n                            collectionsStatuses: match$1.collectionsStatuses,\n                            formStatus: {\n                              TAG: \"Submitting\",\n                              _0: tmp\n                            },\n                            submissionStatus: \"AttemptedToSubmit\"\n                          },\n                          _1: (function (param) {\n                              var dispatch = param.dispatch;\n                              onSubmit(output, {\n                                    notifyOnSuccess: (function (input) {\n                                        dispatch({\n                                              TAG: \"SetSubmittedStatus\",\n                                              _0: input\n                                            });\n                                      }),\n                                    notifyOnFailure: (function (error) {\n                                        dispatch({\n                                              TAG: \"SetSubmissionFailedStatus\",\n                                              _0: error\n                                            });\n                                      }),\n                                    reset: (function () {\n                                        dispatch(\"Reset\");\n                                      }),\n                                    dismissSubmissionResult: (function () {\n                                        dispatch(\"DismissSubmissionResult\");\n                                      })\n                                  });\n                            })\n                        };\n                  break;\n              case \"DismissSubmissionError\" :\n                  var match$2 = state.formStatus;\n                  if (typeof match$2 !== \"object\" || match$2.TAG !== \"SubmissionFailed\") {\n                    return \"NoUpdate\";\n                  } else {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: state.fieldsStatuses,\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: \"Editing\",\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  }\n              case \"DismissSubmissionResult\" :\n                  var match$3 = state.formStatus;\n                  if (typeof match$3 !== \"object\") {\n                    if (match$3 === \"Editing\") {\n                      return \"NoUpdate\";\n                    }\n                    \n                  } else if (match$3.TAG === \"Submitting\") {\n                    return \"NoUpdate\";\n                  }\n                  return {\n                          TAG: \"Update\",\n                          _0: {\n                            input: state.input,\n                            fieldsStatuses: state.fieldsStatuses,\n                            collectionsStatuses: state.collectionsStatuses,\n                            formStatus: \"Editing\",\n                            submissionStatus: state.submissionStatus\n                          }\n                        };\n              case \"Reset\" :\n                  return {\n                          TAG: \"Update\",\n                          _0: initialState(initialInput)\n                        };\n              \n            }\n          } else {\n            switch (action.TAG) {\n              case \"UpdateDescriptionField\" :\n                  var nextInput = action._0(state.input);\n                  return {\n                          TAG: \"Update\",\n                          _0: {\n                            input: nextInput,\n                            fieldsStatuses: Formality.validateFieldOnChangeWithoutValidator(nextInput.description, (function (status) {\n                                    var init = state.fieldsStatuses;\n                                    return {\n                                            description: status,\n                                            active: init.active,\n                                            url: init.url\n                                          };\n                                  })),\n                            collectionsStatuses: state.collectionsStatuses,\n                            formStatus: state.formStatus,\n                            submissionStatus: state.submissionStatus\n                          }\n                        };\n              case \"UpdateActiveField\" :\n                  var nextInput$1 = action._0(state.input);\n                  return {\n                          TAG: \"Update\",\n                          _0: {\n                            input: nextInput$1,\n                            fieldsStatuses: Formality.validateFieldOnChangeWithoutValidator(nextInput$1.active, (function (status) {\n                                    var init = state.fieldsStatuses;\n                                    return {\n                                            description: init.description,\n                                            active: status,\n                                            url: init.url\n                                          };\n                                  })),\n                            collectionsStatuses: state.collectionsStatuses,\n                            formStatus: state.formStatus,\n                            submissionStatus: state.submissionStatus\n                          }\n                        };\n              case \"UpdateUrlField\" :\n                  var nextInput$2 = action._0(state.input);\n                  return {\n                          TAG: \"Update\",\n                          _0: {\n                            input: nextInput$2,\n                            fieldsStatuses: Formality.validateFieldOnChangeWithoutValidator(nextInput$2.url, (function (status) {\n                                    var init = state.fieldsStatuses;\n                                    return {\n                                            description: init.description,\n                                            active: init.active,\n                                            url: status\n                                          };\n                                  })),\n                            collectionsStatuses: state.collectionsStatuses,\n                            formStatus: state.formStatus,\n                            submissionStatus: state.submissionStatus\n                          }\n                        };\n              case \"SetSubmittedStatus\" :\n                  var input = action._0;\n                  if (input !== undefined) {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: input,\n                              fieldsStatuses: {\n                                description: \"Pristine\",\n                                active: \"Pristine\",\n                                url: \"Pristine\"\n                              },\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: \"Submitted\",\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  } else {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: {\n                                description: \"Pristine\",\n                                active: \"Pristine\",\n                                url: \"Pristine\"\n                              },\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: \"Submitted\",\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  }\n              case \"SetSubmissionFailedStatus\" :\n                  return {\n                          TAG: \"Update\",\n                          _0: {\n                            input: state.input,\n                            fieldsStatuses: state.fieldsStatuses,\n                            collectionsStatuses: state.collectionsStatuses,\n                            formStatus: {\n                              TAG: \"SubmissionFailed\",\n                              _0: action._0\n                            },\n                            submissionStatus: state.submissionStatus\n                          }\n                        };\n              case \"MapSubmissionError\" :\n                  var map = action._0;\n                  var error$1 = state.formStatus;\n                  if (typeof error$1 !== \"object\") {\n                    return \"NoUpdate\";\n                  }\n                  if (error$1.TAG !== \"Submitting\") {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: state.fieldsStatuses,\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: {\n                                TAG: \"SubmissionFailed\",\n                                _0: map(error$1._0)\n                              },\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  }\n                  var error$2 = error$1._0;\n                  if (error$2 !== undefined) {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: state.fieldsStatuses,\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: {\n                                TAG: \"Submitting\",\n                                _0: Caml_option.some(map(Caml_option.valFromOption(error$2)))\n                              },\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  } else {\n                    return \"NoUpdate\";\n                  }\n              \n            }\n          }\n        }));\n  var dispatch = match[1];\n  var state = match[0];\n  var match$1 = state.formStatus;\n  var tmp;\n  tmp = typeof match$1 !== \"object\" || match$1.TAG !== \"Submitting\" ? false : true;\n  return {\n          updateDescription: (function (nextInputFn, nextValue) {\n              dispatch({\n                    TAG: \"UpdateDescriptionField\",\n                    _0: (function (__x) {\n                        return nextInputFn(__x, nextValue);\n                      })\n                  });\n            }),\n          updateActive: (function (nextInputFn, nextValue) {\n              dispatch({\n                    TAG: \"UpdateActiveField\",\n                    _0: (function (__x) {\n                        return nextInputFn(__x, nextValue);\n                      })\n                  });\n            }),\n          updateUrl: (function (nextInputFn, nextValue) {\n              dispatch({\n                    TAG: \"UpdateUrlField\",\n                    _0: (function (__x) {\n                        return nextInputFn(__x, nextValue);\n                      })\n                  });\n            }),\n          blurDescription: (function () {\n              dispatch(\"BlurDescriptionField\");\n            }),\n          blurActive: (function () {\n              dispatch(\"BlurActiveField\");\n            }),\n          blurUrl: (function () {\n              dispatch(\"BlurUrlField\");\n            }),\n          descriptionResult: Formality.exposeFieldResult(state.fieldsStatuses.description),\n          activeResult: Formality.exposeFieldResult(state.fieldsStatuses.active),\n          urlResult: Formality.exposeFieldResult(state.fieldsStatuses.url),\n          input: state.input,\n          status: state.formStatus,\n          dirty: (function () {\n              var match = state.fieldsStatuses;\n              var tmp = match.description;\n              if (typeof tmp === \"object\") {\n                return true;\n              }\n              var tmp$1 = match.active;\n              if (typeof tmp$1 === \"object\") {\n                return true;\n              }\n              var tmp$2 = match.url;\n              if (typeof tmp$2 !== \"object\") {\n                return false;\n              } else {\n                return true;\n              }\n            }),\n          valid: (function () {\n              var match = validateForm(state.input, validators, state.fieldsStatuses);\n              if (match.TAG === \"Valid\") {\n                return true;\n              } else {\n                return false;\n              }\n            }),\n          submitting: tmp,\n          submit: (function () {\n              dispatch(\"Submit\");\n            }),\n          dismissSubmissionError: (function () {\n              dispatch(\"DismissSubmissionError\");\n            }),\n          dismissSubmissionResult: (function () {\n              dispatch(\"DismissSubmissionResult\");\n            }),\n          mapSubmissionError: (function (map) {\n              dispatch({\n                    TAG: \"MapSubmissionError\",\n                    _0: map\n                  });\n            }),\n          reset: (function () {\n              dispatch(\"Reset\");\n            })\n        };\n}\n\nvar ImageForm = {\n  validators: validators,\n  initialFieldsStatuses: initialFieldsStatuses,\n  initialCollectionsStatuses: undefined,\n  initialState: initialState,\n  validateForm: validateForm,\n  useForm: useForm\n};\n\nfunction DashboardProductEditorImageForm(props) {\n  var updateTimeout = props.updateTimeout;\n  var toggleDestroy = props.toggleDestroy;\n  var updateProduct = props.updateProduct;\n  var image = props.image;\n  var product = props.product;\n  var initialInput = React.useMemo((function () {\n          return {\n                  description: image.description,\n                  active: image.active,\n                  url: image.url\n                };\n        }), []);\n  var form = useForm(initialInput, (function (output, cb) {\n          $$Promise.wait(Api_Product.updateImage(product.id, image.id, {\n                    id: image.id,\n                    publicId: image.publicId,\n                    url: image.url,\n                    width: image.width,\n                    height: image.height,\n                    active: output.active,\n                    description: output.description,\n                    position: image.position\n                  }), (function (x) {\n                  if (x.TAG !== \"Ok\") {\n                    return SentryLogger.error1({\n                                rootModule: \"DashboardProductEditorImageForm\",\n                                subModulePath: /* [] */0,\n                                value: \"make\",\n                                fullPath: \"DashboardProductEditorImageForm.make\"\n                              }, \"ProductImage::Update::Error\", [\n                                \"Error\",\n                                x._0\n                              ]);\n                  }\n                  var res = x._0;\n                  updateProduct(res);\n                  var id = image.id;\n                  var i = Belt_Option.getExn(Js_array.find((function (image) {\n                              return Caml_obj.equal(id, image.id);\n                            }), res.images));\n                  cb.notifyOnSuccess({\n                        description: i.description,\n                        active: i.active,\n                        url: i.url\n                      });\n                }));\n        }));\n  var fieldError = function (field) {\n    if (field !== undefined && field.TAG !== \"Ok\") {\n      return JsxRuntime.jsx(ErrorMessage.make, {\n                  className: css.error,\n                  children: field._0\n                });\n    } else {\n      return null;\n    }\n  };\n  var id = \"image--\" + ID.toString(image.id);\n  return JsxRuntime.jsxs(\"div\", {\n              children: [\n                JsxRuntime.jsxs(\"div\", {\n                      children: [\n                        JsxRuntime.jsx(Picture.make, {\n                              src: form.input.url,\n                              large: [\n                                300,\n                                300\n                              ],\n                              className: css.image\n                            }),\n                        JsxRuntime.jsxs(\"div\", {\n                              children: [\n                                JsxRuntime.jsx(IconDelete.make, {\n                                      size: \"LG\",\n                                      color: \"White\",\n                                      viewBoxSize: \"20\"\n                                    }),\n                                \"Delete\"\n                              ],\n                              className: css.deleteAsset,\n                              onClick: (function (param) {\n                                  toggleDestroy(image.id);\n                                })\n                            })\n                      ],\n                      className: css.assetOverlay\n                    }),\n                JsxRuntime.jsxs(\"div\", {\n                      children: [\n                        JsxRuntime.jsxs(\"div\", {\n                              children: [\n                                JsxRuntime.jsx(TextField.make, {\n                                      id: \"edit-provider-image-description\" + ID.toString(image.id),\n                                      value: form.input.description,\n                                      placeholder: \"Image Description\",\n                                      disabled: form.submitting ? true : false,\n                                      className: css.assetInput,\n                                      onChange: (function ($$event) {\n                                          form.updateDescription((function (input, value) {\n                                                  return {\n                                                          description: value,\n                                                          active: input.active,\n                                                          url: input.url\n                                                        };\n                                                }), $$event.target.value);\n                                          updateTimeout(setTimeout((function () {\n                                                      form.submit();\n                                                    }), 900));\n                                        })\n                                    }),\n                                fieldError(form.descriptionResult)\n                              ],\n                              className: css.descriptionContainer\n                            }),\n                        JsxRuntime.jsxs(\"div\", {\n                              children: [\n                                JsxRuntime.jsx(\"div\", {\n                                      children: form.input.active ? \"Approved\" : \"Pending Approval\",\n                                      className: Cx.cx([css.inactiveText])\n                                    }),\n                                JsxRuntime.jsx(Toggle.make, {\n                                      on: form.input.active,\n                                      size: \"SM\",\n                                      onChange: (function (_event) {\n                                          form.updateActive((function (input, value) {\n                                                  return {\n                                                          description: input.description,\n                                                          active: value,\n                                                          url: input.url\n                                                        };\n                                                }), !form.input.active);\n                                          updateTimeout(setTimeout((function () {\n                                                      form.submit();\n                                                    }), 900));\n                                        })\n                                    })\n                              ],\n                              className: css.toggleContainer\n                            })\n                      ],\n                      className: css.assetDescription\n                    })\n              ],\n              className: css.imageContainer,\n              id: id\n            }, id);\n}\n\nvar make = DashboardProductEditorImageForm;\n\nexport {\n  css ,\n  ImageForm ,\n  make ,\n}\n/* css Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Cx from \"rescript-classnames/src/Cx.res.js\";\nimport * as ID from \"../../../libs/ID.res.js\";\nimport * as React from \"react\";\nimport * as Toggle from \"../../../styleguide/forms/Toggle/Toggle.res.js\";\nimport * as Picture from \"../../../styleguide/forms/Picture/Picture.res.js\";\nimport * as $$Promise from \"../../../bindings/Promise.res.js\";\nimport * as Caml_obj from \"rescript/lib/es6/caml_obj.js\";\nimport * as Js_array from \"rescript/lib/es6/js_array.js\";\nimport * as Formality from \"re-formality/src/Formality.res.js\";\nimport * as TextField from \"../../../styleguide/forms/TextField/TextField.res.js\";\nimport * as IconDelete from \"../../../styleguide/icons/IconDelete.res.js\";\nimport * as Api_Product from \"../../../api/products/Api_Product.res.js\";\nimport * as Belt_Option from \"rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"rescript/lib/es6/caml_option.js\";\nimport * as ErrorMessage from \"../../../styleguide/forms/ErrorMessage/ErrorMessage.res.js\";\nimport * as SentryLogger from \"../../../loggers/SentryLogger.res.js\";\nimport * as JsxRuntime from \"react/jsx-runtime\";\nimport * as Formality__ReactUpdate from \"re-formality/src/Formality__ReactUpdate.res.js\";\nimport * as DashboardProductEditorScss from \"./DashboardProductEditor.scss\";\n\nvar css = DashboardProductEditorScss;\n\nvar validators = {\n  description: undefined,\n  active: undefined,\n  url: undefined\n};\n\nfunction initialFieldsStatuses(_input) {\n  return {\n          description: \"Pristine\",\n          active: \"Pristine\",\n          url: \"Pristine\"\n        };\n}\n\nfunction initialState(input) {\n  return {\n          input: input,\n          fieldsStatuses: {\n            description: \"Pristine\",\n            active: \"Pristine\",\n            url: \"Pristine\"\n          },\n          collectionsStatuses: undefined,\n          formStatus: \"Editing\",\n          submissionStatus: \"NeverSubmitted\"\n        };\n}\n\nfunction validateForm(input, param, param$1) {\n  var match_0 = {\n    TAG: \"Ok\",\n    _0: input.description\n  };\n  var match_0$1 = {\n    TAG: \"Ok\",\n    _0: input.active\n  };\n  var match_0$2 = {\n    TAG: \"Ok\",\n    _0: input.url\n  };\n  var descriptionResult = match_0;\n  var descriptionResult$1;\n  if (descriptionResult.TAG === \"Ok\") {\n    var activeResult = match_0$1;\n    if (activeResult.TAG === \"Ok\") {\n      var urlResult = match_0$2;\n      if (urlResult.TAG === \"Ok\") {\n        return {\n                TAG: \"Valid\",\n                output: {\n                  description: descriptionResult._0,\n                  active: activeResult._0,\n                  url: urlResult._0\n                },\n                fieldsStatuses: {\n                  description: {\n                    TAG: \"Dirty\",\n                    _0: descriptionResult,\n                    _1: \"Hidden\"\n                  },\n                  active: {\n                    TAG: \"Dirty\",\n                    _0: activeResult,\n                    _1: \"Hidden\"\n                  },\n                  url: {\n                    TAG: \"Dirty\",\n                    _0: urlResult,\n                    _1: \"Hidden\"\n                  }\n                },\n                collectionsStatuses: undefined\n              };\n      }\n      descriptionResult$1 = descriptionResult;\n    } else {\n      descriptionResult$1 = descriptionResult;\n    }\n  } else {\n    descriptionResult$1 = descriptionResult;\n  }\n  return {\n          TAG: \"Invalid\",\n          fieldsStatuses: {\n            description: {\n              TAG: \"Dirty\",\n              _0: descriptionResult$1,\n              _1: \"Hidden\"\n            },\n            active: {\n              TAG: \"Dirty\",\n              _0: match_0$1,\n              _1: \"Hidden\"\n            },\n            url: {\n              TAG: \"Dirty\",\n              _0: match_0$2,\n              _1: \"Hidden\"\n            }\n          },\n          collectionsStatuses: undefined\n        };\n}\n\nfunction useForm(initialInput, onSubmit) {\n  var memoizedInitialState = React.useMemo((function () {\n          return initialState(initialInput);\n        }), [initialInput]);\n  var match = Formality__ReactUpdate.useReducer(memoizedInitialState, (function (state, action) {\n          if (typeof action !== \"object\") {\n            switch (action) {\n              case \"BlurDescriptionField\" :\n                  var result = Formality.validateFieldOnBlurWithoutValidator(state.input.description, state.fieldsStatuses.description, (function (status) {\n                          var init = state.fieldsStatuses;\n                          return {\n                                  description: status,\n                                  active: init.active,\n                                  url: init.url\n                                };\n                        }));\n                  if (result !== undefined) {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: result,\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: state.formStatus,\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  } else {\n                    return \"NoUpdate\";\n                  }\n              case \"BlurActiveField\" :\n                  var result$1 = Formality.validateFieldOnBlurWithoutValidator(state.input.active, state.fieldsStatuses.active, (function (status) {\n                          var init = state.fieldsStatuses;\n                          return {\n                                  description: init.description,\n                                  active: status,\n                                  url: init.url\n                                };\n                        }));\n                  if (result$1 !== undefined) {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: result$1,\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: state.formStatus,\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  } else {\n                    return \"NoUpdate\";\n                  }\n              case \"BlurUrlField\" :\n                  var result$2 = Formality.validateFieldOnBlurWithoutValidator(state.input.url, state.fieldsStatuses.url, (function (status) {\n                          var init = state.fieldsStatuses;\n                          return {\n                                  description: init.description,\n                                  active: init.active,\n                                  url: status\n                                };\n                        }));\n                  if (result$2 !== undefined) {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: result$2,\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: state.formStatus,\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  } else {\n                    return \"NoUpdate\";\n                  }\n              case \"Submit\" :\n                  var match = state.formStatus;\n                  if (typeof match === \"object\" && match.TAG === \"Submitting\") {\n                    return \"NoUpdate\";\n                  }\n                  var match$1 = validateForm(state.input, validators, state.fieldsStatuses);\n                  if (match$1.TAG !== \"Valid\") {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: match$1.fieldsStatuses,\n                              collectionsStatuses: match$1.collectionsStatuses,\n                              formStatus: \"Editing\",\n                              submissionStatus: \"AttemptedToSubmit\"\n                            }\n                          };\n                  }\n                  var output = match$1.output;\n                  var error = state.formStatus;\n                  var tmp;\n                  tmp = typeof error !== \"object\" || error.TAG !== \"SubmissionFailed\" ? undefined : Caml_option.some(error._0);\n                  return {\n                          TAG: \"UpdateWithSideEffects\",\n                          _0: {\n                            input: state.input,\n                            fieldsStatuses: match$1.fieldsStatuses,\n                            collectionsStatuses: match$1.collectionsStatuses,\n                            formStatus: {\n                              TAG: \"Submitting\",\n                              _0: tmp\n                            },\n                            submissionStatus: \"AttemptedToSubmit\"\n                          },\n                          _1: (function (param) {\n                              var dispatch = param.dispatch;\n                              onSubmit(output, {\n                                    notifyOnSuccess: (function (input) {\n                                        dispatch({\n                                              TAG: \"SetSubmittedStatus\",\n                                              _0: input\n                                            });\n                                      }),\n                                    notifyOnFailure: (function (error) {\n                                        dispatch({\n                                              TAG: \"SetSubmissionFailedStatus\",\n                                              _0: error\n                                            });\n                                      }),\n                                    reset: (function () {\n                                        dispatch(\"Reset\");\n                                      }),\n                                    dismissSubmissionResult: (function () {\n                                        dispatch(\"DismissSubmissionResult\");\n                                      })\n                                  });\n                            })\n                        };\n                  break;\n              case \"DismissSubmissionError\" :\n                  var match$2 = state.formStatus;\n                  if (typeof match$2 !== \"object\" || match$2.TAG !== \"SubmissionFailed\") {\n                    return \"NoUpdate\";\n                  } else {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: state.fieldsStatuses,\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: \"Editing\",\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  }\n              case \"DismissSubmissionResult\" :\n                  var match$3 = state.formStatus;\n                  if (typeof match$3 !== \"object\") {\n                    if (match$3 === \"Editing\") {\n                      return \"NoUpdate\";\n                    }\n                    \n                  } else if (match$3.TAG === \"Submitting\") {\n                    return \"NoUpdate\";\n                  }\n                  return {\n                          TAG: \"Update\",\n                          _0: {\n                            input: state.input,\n                            fieldsStatuses: state.fieldsStatuses,\n                            collectionsStatuses: state.collectionsStatuses,\n                            formStatus: \"Editing\",\n                            submissionStatus: state.submissionStatus\n                          }\n                        };\n              case \"Reset\" :\n                  return {\n                          TAG: \"Update\",\n                          _0: initialState(initialInput)\n                        };\n              \n            }\n          } else {\n            switch (action.TAG) {\n              case \"UpdateDescriptionField\" :\n                  var nextInput = action._0(state.input);\n                  return {\n                          TAG: \"Update\",\n                          _0: {\n                            input: nextInput,\n                            fieldsStatuses: Formality.validateFieldOnChangeWithoutValidator(nextInput.description, (function (status) {\n                                    var init = state.fieldsStatuses;\n                                    return {\n                                            description: status,\n                                            active: init.active,\n                                            url: init.url\n                                          };\n                                  })),\n                            collectionsStatuses: state.collectionsStatuses,\n                            formStatus: state.formStatus,\n                            submissionStatus: state.submissionStatus\n                          }\n                        };\n              case \"UpdateActiveField\" :\n                  var nextInput$1 = action._0(state.input);\n                  return {\n                          TAG: \"Update\",\n                          _0: {\n                            input: nextInput$1,\n                            fieldsStatuses: Formality.validateFieldOnChangeWithoutValidator(nextInput$1.active, (function (status) {\n                                    var init = state.fieldsStatuses;\n                                    return {\n                                            description: init.description,\n                                            active: status,\n                                            url: init.url\n                                          };\n                                  })),\n                            collectionsStatuses: state.collectionsStatuses,\n                            formStatus: state.formStatus,\n                            submissionStatus: state.submissionStatus\n                          }\n                        };\n              case \"UpdateUrlField\" :\n                  var nextInput$2 = action._0(state.input);\n                  return {\n                          TAG: \"Update\",\n                          _0: {\n                            input: nextInput$2,\n                            fieldsStatuses: Formality.validateFieldOnChangeWithoutValidator(nextInput$2.url, (function (status) {\n                                    var init = state.fieldsStatuses;\n                                    return {\n                                            description: init.description,\n                                            active: init.active,\n                                            url: status\n                                          };\n                                  })),\n                            collectionsStatuses: state.collectionsStatuses,\n                            formStatus: state.formStatus,\n                            submissionStatus: state.submissionStatus\n                          }\n                        };\n              case \"SetSubmittedStatus\" :\n                  var input = action._0;\n                  if (input !== undefined) {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: input,\n                              fieldsStatuses: {\n                                description: \"Pristine\",\n                                active: \"Pristine\",\n                                url: \"Pristine\"\n                              },\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: \"Submitted\",\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  } else {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: {\n                                description: \"Pristine\",\n                                active: \"Pristine\",\n                                url: \"Pristine\"\n                              },\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: \"Submitted\",\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  }\n              case \"SetSubmissionFailedStatus\" :\n                  return {\n                          TAG: \"Update\",\n                          _0: {\n                            input: state.input,\n                            fieldsStatuses: state.fieldsStatuses,\n                            collectionsStatuses: state.collectionsStatuses,\n                            formStatus: {\n                              TAG: \"SubmissionFailed\",\n                              _0: action._0\n                            },\n                            submissionStatus: state.submissionStatus\n                          }\n                        };\n              case \"MapSubmissionError\" :\n                  var map = action._0;\n                  var error$1 = state.formStatus;\n                  if (typeof error$1 !== \"object\") {\n                    return \"NoUpdate\";\n                  }\n                  if (error$1.TAG !== \"Submitting\") {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: state.fieldsStatuses,\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: {\n                                TAG: \"SubmissionFailed\",\n                                _0: map(error$1._0)\n                              },\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  }\n                  var error$2 = error$1._0;\n                  if (error$2 !== undefined) {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              input: state.input,\n                              fieldsStatuses: state.fieldsStatuses,\n                              collectionsStatuses: state.collectionsStatuses,\n                              formStatus: {\n                                TAG: \"Submitting\",\n                                _0: Caml_option.some(map(Caml_option.valFromOption(error$2)))\n                              },\n                              submissionStatus: state.submissionStatus\n                            }\n                          };\n                  } else {\n                    return \"NoUpdate\";\n                  }\n              \n            }\n          }\n        }));\n  var dispatch = match[1];\n  var state = match[0];\n  var match$1 = state.formStatus;\n  var tmp;\n  tmp = typeof match$1 !== \"object\" || match$1.TAG !== \"Submitting\" ? false : true;\n  return {\n          updateDescription: (function (nextInputFn, nextValue) {\n              dispatch({\n                    TAG: \"UpdateDescriptionField\",\n                    _0: (function (__x) {\n                        return nextInputFn(__x, nextValue);\n                      })\n                  });\n            }),\n          updateActive: (function (nextInputFn, nextValue) {\n              dispatch({\n                    TAG: \"UpdateActiveField\",\n                    _0: (function (__x) {\n                        return nextInputFn(__x, nextValue);\n                      })\n                  });\n            }),\n          updateUrl: (function (nextInputFn, nextValue) {\n              dispatch({\n                    TAG: \"UpdateUrlField\",\n                    _0: (function (__x) {\n                        return nextInputFn(__x, nextValue);\n                      })\n                  });\n            }),\n          blurDescription: (function () {\n              dispatch(\"BlurDescriptionField\");\n            }),\n          blurActive: (function () {\n              dispatch(\"BlurActiveField\");\n            }),\n          blurUrl: (function () {\n              dispatch(\"BlurUrlField\");\n            }),\n          descriptionResult: Formality.exposeFieldResult(state.fieldsStatuses.description),\n          activeResult: Formality.exposeFieldResult(state.fieldsStatuses.active),\n          urlResult: Formality.exposeFieldResult(state.fieldsStatuses.url),\n          input: state.input,\n          status: state.formStatus,\n          dirty: (function () {\n              var match = state.fieldsStatuses;\n              var tmp = match.description;\n              if (typeof tmp === \"object\") {\n                return true;\n              }\n              var tmp$1 = match.active;\n              if (typeof tmp$1 === \"object\") {\n                return true;\n              }\n              var tmp$2 = match.url;\n              if (typeof tmp$2 !== \"object\") {\n                return false;\n              } else {\n                return true;\n              }\n            }),\n          valid: (function () {\n              var match = validateForm(state.input, validators, state.fieldsStatuses);\n              if (match.TAG === \"Valid\") {\n                return true;\n              } else {\n                return false;\n              }\n            }),\n          submitting: tmp,\n          submit: (function () {\n              dispatch(\"Submit\");\n            }),\n          dismissSubmissionError: (function () {\n              dispatch(\"DismissSubmissionError\");\n            }),\n          dismissSubmissionResult: (function () {\n              dispatch(\"DismissSubmissionResult\");\n            }),\n          mapSubmissionError: (function (map) {\n              dispatch({\n                    TAG: \"MapSubmissionError\",\n                    _0: map\n                  });\n            }),\n          reset: (function () {\n              dispatch(\"Reset\");\n            })\n        };\n}\n\nvar VideoForm = {\n  validators: validators,\n  initialFieldsStatuses: initialFieldsStatuses,\n  initialCollectionsStatuses: undefined,\n  initialState: initialState,\n  validateForm: validateForm,\n  useForm: useForm\n};\n\nfunction DashboardProductEditorVideoForm(props) {\n  var updateTimeout = props.updateTimeout;\n  var toggleDestroy = props.toggleDestroy;\n  var updateProduct = props.updateProduct;\n  var video = props.video;\n  var product = props.product;\n  var initialInput = React.useMemo((function () {\n          return {\n                  description: video.description,\n                  active: video.active,\n                  url: video.url\n                };\n        }), []);\n  var form = useForm(initialInput, (function (output, cb) {\n          $$Promise.wait(Api_Product.updateVideo(product.id, video.id, {\n                    id: video.id,\n                    publicId: video.publicId,\n                    source: video.source,\n                    url: video.url,\n                    width: video.width,\n                    height: video.height,\n                    active: output.active,\n                    description: output.description,\n                    position: video.position\n                  }), (function (x) {\n                  if (x.TAG !== \"Ok\") {\n                    return SentryLogger.error1({\n                                rootModule: \"DashboardProductEditorVideoForm\",\n                                subModulePath: /* [] */0,\n                                value: \"make\",\n                                fullPath: \"DashboardProductEditorVideoForm.make\"\n                              }, \"ProductImage::Update::Error\", [\n                                \"Error\",\n                                x._0\n                              ]);\n                  }\n                  var res = x._0;\n                  updateProduct(res);\n                  var id = video.id;\n                  var i = Belt_Option.getExn(Js_array.find((function (video) {\n                              return Caml_obj.equal(id, video.id);\n                            }), res.videos));\n                  cb.notifyOnSuccess({\n                        description: i.description,\n                        active: i.active,\n                        url: i.url\n                      });\n                }));\n        }));\n  var fieldError = function (field) {\n    if (field !== undefined && field.TAG !== \"Ok\") {\n      return JsxRuntime.jsx(ErrorMessage.make, {\n                  className: css.error,\n                  children: field._0\n                });\n    } else {\n      return null;\n    }\n  };\n  var id = \"image--\" + ID.toString(video.id);\n  var match = video.source;\n  var tmp;\n  var exit = 0;\n  switch (match) {\n    case \"Cloudinary\" :\n        tmp = JsxRuntime.jsx(Picture.make, {\n              src: form.input.url,\n              large: [\n                300,\n                300\n              ],\n              className: css.image\n            });\n        break;\n    case \"YouTube\" :\n    case \"Vimeo\" :\n        exit = 1;\n        break;\n    \n  }\n  if (exit === 1) {\n    tmp = JsxRuntime.jsx(\"img\", {\n          className: css.youtubeImage,\n          src: \"https://img.youtube.com/vi/\" + video.publicId + \"/mqdefault.jpg\"\n        });\n  }\n  var match$1 = video.source;\n  var tmp$1;\n  switch (match$1) {\n    case \"Cloudinary\" :\n        tmp$1 = css.assetOverlay;\n        break;\n    case \"YouTube\" :\n    case \"Vimeo\" :\n        tmp$1 = css.assetOverlayYoutube;\n        break;\n    \n  }\n  return JsxRuntime.jsxs(\"div\", {\n              children: [\n                JsxRuntime.jsxs(\"div\", {\n                      children: [\n                        tmp,\n                        JsxRuntime.jsxs(\"div\", {\n                              children: [\n                                JsxRuntime.jsx(IconDelete.make, {\n                                      size: \"LG\",\n                                      color: \"White\",\n                                      viewBoxSize: \"20\"\n                                    }),\n                                \"Delete\"\n                              ],\n                              className: css.deleteAsset,\n                              onClick: (function (param) {\n                                  toggleDestroy(video.id);\n                                })\n                            })\n                      ],\n                      className: Cx.cx([tmp$1])\n                    }),\n                JsxRuntime.jsxs(\"div\", {\n                      children: [\n                        JsxRuntime.jsxs(\"div\", {\n                              children: [\n                                JsxRuntime.jsx(TextField.make, {\n                                      id: \"edit-product-image-description\" + ID.toString(video.id),\n                                      value: form.input.description,\n                                      placeholder: \"Image Description\",\n                                      disabled: form.submitting ? true : false,\n                                      className: css.assetInput,\n                                      onChange: (function ($$event) {\n                                          form.updateDescription((function (input, value) {\n                                                  return {\n                                                          description: value,\n                                                          active: input.active,\n                                                          url: input.url\n                                                        };\n                                                }), $$event.target.value);\n                                          updateTimeout(setTimeout((function () {\n                                                      form.submit();\n                                                    }), 900));\n                                        })\n                                    }),\n                                fieldError(form.descriptionResult)\n                              ],\n                              className: css.descriptionContainer\n                            }),\n                        JsxRuntime.jsxs(\"div\", {\n                              children: [\n                                JsxRuntime.jsx(\"div\", {\n                                      children: form.input.active ? \"Approved\" : \"Pending Approval\",\n                                      className: Cx.cx([css.inactiveText])\n                                    }),\n                                JsxRuntime.jsx(Toggle.make, {\n                                      on: form.input.active,\n                                      size: \"SM\",\n                                      onChange: (function (_event) {\n                                          form.updateActive((function (input, value) {\n                                                  return {\n                                                          description: input.description,\n                                                          active: value,\n                                                          url: input.url\n                                                        };\n                                                }), !form.input.active);\n                                          updateTimeout(setTimeout((function () {\n                                                      form.submit();\n                                                    }), 900));\n                                        })\n                                    })\n                              ],\n                              className: css.toggleContainer\n                            })\n                      ],\n                      className: css.assetDescription\n                    })\n              ],\n              className: css.imageContainer,\n              id: id\n            }, id);\n}\n\nvar make = DashboardProductEditorVideoForm;\n\nexport {\n  css ,\n  VideoForm ,\n  make ,\n}\n/* css Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Api from \"../../../api/Api.res.js\";\nimport * as Form from \"../../../styleguide/forms/Form/Form.res.js\";\nimport * as Hooks from \"../../../libs/Hooks.res.js\";\nimport * as Label from \"../../../styleguide/forms/Label/Label.res.js\";\nimport * as Regex from \"../../../libs/Regex.res.js\";\nimport * as Video from \"../../../models/Video.res.js\";\nimport * as Button from \"../../../styleguide/components/Button/Button.res.js\";\nimport * as IconOk from \"../../../styleguide/icons/IconOk.res.js\";\nimport * as $$Promise from \"../../../bindings/Promise.res.js\";\nimport * as TextField from \"../../../styleguide/forms/TextField/TextField.res.js\";\nimport * as Belt_Array from \"rescript/lib/es6/belt_Array.js\";\nimport * as Belt_Option from \"rescript/lib/es6/belt_Option.js\";\nimport * as Belt_Result from \"rescript/lib/es6/belt_Result.js\";\nimport * as Caml_option from \"rescript/lib/es6/caml_option.js\";\nimport * as SentryLogger from \"../../../loggers/SentryLogger.res.js\";\nimport * as JsxRuntime from \"react/jsx-runtime\";\nimport * as DashboardProductEditorScss from \"./DashboardProductEditor.scss\";\n\nvar css = DashboardProductEditorScss;\n\nfunction parseUrl(url) {\n  if (url === \"\") {\n    return {\n            TAG: \"Error\",\n            _0: \"NoUrl\"\n          };\n  } else {\n    return Belt_Option.getWithDefault(Belt_Option.map(Caml_option.null_to_opt(Regex.youtube().exec(url)), (function (res) {\n                      var match = Belt_Option.flatMap(Belt_Array.get(res, 0), (function (prim) {\n                              if (prim == null) {\n                                return ;\n                              } else {\n                                return Caml_option.some(prim);\n                              }\n                            }));\n                      var match$1 = Belt_Option.flatMap(Belt_Array.get(res, 1), (function (prim) {\n                              if (prim == null) {\n                                return ;\n                              } else {\n                                return Caml_option.some(prim);\n                              }\n                            }));\n                      if (match !== undefined && match$1 !== undefined) {\n                        return {\n                                TAG: \"Ok\",\n                                _0: [\n                                  \"YouTube\",\n                                  [\n                                    match,\n                                    match$1\n                                  ]\n                                ]\n                              };\n                      } else {\n                        return {\n                                TAG: \"Error\",\n                                _0: \"BadUrl\"\n                              };\n                      }\n                    })), Belt_Option.getWithDefault(Belt_Option.map(Caml_option.null_to_opt(Regex.vimeo().exec(url)), (function (res) {\n                          var match = Belt_Option.flatMap(Belt_Array.get(res, 0), (function (prim) {\n                                  if (prim == null) {\n                                    return ;\n                                  } else {\n                                    return Caml_option.some(prim);\n                                  }\n                                }));\n                          var match$1 = Belt_Option.flatMap(Belt_Array.get(res, 4), (function (prim) {\n                                  if (prim == null) {\n                                    return ;\n                                  } else {\n                                    return Caml_option.some(prim);\n                                  }\n                                }));\n                          if (match !== undefined && match$1 !== undefined) {\n                            return {\n                                    TAG: \"Ok\",\n                                    _0: [\n                                      \"Vimeo\",\n                                      [\n                                        match,\n                                        match$1\n                                      ]\n                                    ]\n                                  };\n                          } else {\n                            return {\n                                    TAG: \"Error\",\n                                    _0: \"BadUrl\"\n                                  };\n                          }\n                        })), {\n                    TAG: \"Error\",\n                    _0: \"BadUrl\"\n                  }));\n  }\n}\n\nvar initialState = {\n  status: \"Editing\",\n  input: \"\",\n  result: undefined,\n  submissionError: false\n};\n\nfunction DashboardProductEditorAssetsTabVideoLinkForm(props) {\n  var updateProduct = props.updateProduct;\n  var addLinkedVideo = props.addLinkedVideo;\n  var videos = props.videos;\n  var productId = props.productId;\n  var match = Hooks.useReducer(initialState, (function (state, action) {\n          if (typeof action !== \"object\") {\n            switch (action) {\n              case \"Submit\" :\n                  var error = Belt_Result.flatMap(parseUrl(state.input), (function (param) {\n                          var match = param[1];\n                          var publicId = match[1];\n                          if (Belt_Array.some(videos, (function (video) {\n                                    return video.NAME === \"Saved\" ? video.VAL[0].publicId === publicId : false;\n                                  }))) {\n                            return {\n                                    TAG: \"Error\",\n                                    _0: \"DupUrl\"\n                                  };\n                          } else {\n                            return {\n                                    TAG: \"Ok\",\n                                    _0: [\n                                      param[0],\n                                      [\n                                        match[0],\n                                        publicId\n                                      ]\n                                    ]\n                                  };\n                          }\n                        }));\n                  if (error.TAG !== \"Ok\") {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              status: \"EditingAfterFailedSubmission\",\n                              input: state.input,\n                              result: {\n                                TAG: \"Error\",\n                                _0: error._0\n                              },\n                              submissionError: state.submissionError\n                            }\n                          };\n                  }\n                  var match = error._0;\n                  var match$1 = match[1];\n                  var publicId = match$1[1];\n                  var url = match$1[0];\n                  var source = match[0];\n                  return {\n                          TAG: \"UpdateWithSideEffects\",\n                          _0: {\n                            status: \"Submitting\",\n                            input: state.input,\n                            result: {\n                              TAG: \"Ok\",\n                              _0: [\n                                source,\n                                [\n                                  url,\n                                  publicId\n                                ]\n                              ]\n                            },\n                            submissionError: state.submissionError\n                          },\n                          _1: (function (param) {\n                              var dispatch = param.dispatch;\n                              $$Promise.wait(Api.createProductVideo(productId, source === \"YouTube\" ? Video.Interim.fromYouTube(\"https://\" + url, publicId, \"100\", \"100\") : Video.Interim.fromVimeo(\"https://\" + url, publicId, \"100\", \"100\")), (function (x) {\n                                      if (x.TAG === \"Ok\") {\n                                        var res = x._0;\n                                        updateProduct(res);\n                                        return dispatch({\n                                                    TAG: \"SucceedSubmission\",\n                                                    _0: res\n                                                  });\n                                      }\n                                      SentryLogger.error1({\n                                            rootModule: \"DashboardProductEditorAssetsTabVideoLinkForm\",\n                                            subModulePath: /* [] */0,\n                                            value: \"make\",\n                                            fullPath: \"DashboardProductEditorAssetsTabVideoLinkForm.make\"\n                                          }, \"DashboardProductEditorAssetsTabVideoLinkForm::Submit::Error\", [\n                                            \"Error\",\n                                            x._0\n                                          ]);\n                                      dispatch(\"FailSubmission\");\n                                    }));\n                            })\n                        };\n              case \"ResetSubmittedStatus\" :\n                  var match$2 = state.status;\n                  if (match$2 === \"Submitted\") {\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              status: \"Editing\",\n                              input: state.input,\n                              result: state.result,\n                              submissionError: state.submissionError\n                            }\n                          };\n                  } else {\n                    return \"NoUpdate\";\n                  }\n              case \"FailSubmission\" :\n                  return {\n                          TAG: \"Update\",\n                          _0: {\n                            status: \"EditingAfterFailedSubmission\",\n                            input: state.input,\n                            result: state.result,\n                            submissionError: true\n                          }\n                        };\n              \n            }\n          } else {\n            if (action.TAG === \"UpdateInput\") {\n              var value = action._0;\n              var match$3 = state.status;\n              switch (match$3) {\n                case \"EditingAfterFailedSubmission\" :\n                    return {\n                            TAG: \"Update\",\n                            _0: {\n                              status: state.status,\n                              input: value,\n                              result: parseUrl(value),\n                              submissionError: false\n                            }\n                          };\n                case \"Submitting\" :\n                    return \"NoUpdate\";\n                case \"Editing\" :\n                case \"Submitted\" :\n                    break;\n                \n              }\n              return {\n                      TAG: \"Update\",\n                      _0: {\n                        status: state.status,\n                        input: value,\n                        result: state.result,\n                        submissionError: state.submissionError\n                      }\n                    };\n            }\n            var video = action._0;\n            return {\n                    TAG: \"UpdateWithSideEffects\",\n                    _0: {\n                      status: \"Submitted\",\n                      input: \"\",\n                      result: undefined,\n                      submissionError: false\n                    },\n                    _1: (function (param) {\n                        var dispatch = param.dispatch;\n                        addLinkedVideo(video);\n                        setTimeout((function () {\n                                dispatch(\"ResetSubmittedStatus\");\n                              }), 5000);\n                      })\n                  };\n          }\n        }));\n  var dispatch = match[1];\n  var state = match[0];\n  var match$1 = state.status;\n  var tmp;\n  tmp = match$1 === \"Submitting\" ? true : false;\n  var match$2 = state.status;\n  var tmp$1;\n  tmp$1 = match$2 === \"Submitted\" ? JsxRuntime.jsxs(\"div\", {\n          children: [\n            JsxRuntime.jsx(IconOk.make, {\n                  size: \"MD\",\n                  color: \"Teal\"\n                }),\n            \"Video saved\"\n          ],\n          className: css.assetsVideoLinkFormSubmitted\n        }) : null;\n  var match$3 = state.result;\n  var tmp$2;\n  if (match$3 !== undefined && match$3.TAG !== \"Ok\") {\n    var tmp$3;\n    if (state.submissionError) {\n      tmp$3 = \"Something went wrong during form submission\";\n    } else {\n      switch (match$3._0) {\n        case \"NoUrl\" :\n            tmp$3 = \"Url is required\";\n            break;\n        case \"BadUrl\" :\n            tmp$3 = \"This is not valid YouTube url\";\n            break;\n        case \"DupUrl\" :\n            tmp$3 = \"This video is already added\";\n            break;\n        \n      }\n    }\n    tmp$2 = JsxRuntime.jsx(\"div\", {\n          children: tmp$3,\n          className: css.assetsVideoLinkFormError\n        });\n  } else {\n    tmp$2 = null;\n  }\n  return JsxRuntime.jsxs(Form.make, {\n              className: css.assetsVideoLinkForm,\n              onSubmit: (function (param) {\n                  dispatch(\"Submit\");\n                }),\n              children: [\n                JsxRuntime.jsx(Label.make, {\n                      forId: \"product-form--video-link\",\n                      children: \"Add a YouTube video\"\n                    }),\n                JsxRuntime.jsxs(\"div\", {\n                      children: [\n                        JsxRuntime.jsx(TextField.make, {\n                              id: \"product-form--video-link\",\n                              value: state.input,\n                              onChange: (function ($$event) {\n                                  dispatch({\n                                        TAG: \"UpdateInput\",\n                                        _0: $$event.target.value\n                                      });\n                                })\n                            }),\n                        JsxRuntime.jsx(Button.make, {\n                              size: \"MD\",\n                              color: \"Teal\",\n                              busy: tmp,\n                              submit: true,\n                              children: \"Add\"\n                            }),\n                        tmp$1\n                      ],\n                      className: css.assetsVideoLinkFormRow\n                    }),\n                tmp$2\n              ]\n            });\n}\n\nvar make = DashboardProductEditorAssetsTabVideoLinkForm;\n\nexport {\n  css ,\n  parseUrl ,\n  initialState ,\n  make ,\n}\n/* css Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as H3 from \"../../../styleguide/components/Heading/H3.res.js\";\nimport * as ID from \"../../../libs/ID.res.js\";\nimport * as Video from \"../../../models/Video.res.js\";\nimport * as React from \"react\";\nimport * as Button from \"../../../styleguide/components/Button/Button.res.js\";\nimport * as $$Promise from \"../../../bindings/Promise.res.js\";\nimport * as Belt_Map from \"rescript/lib/es6/belt_Map.js\";\nimport * as Belt_Array from \"rescript/lib/es6/belt_Array.js\";\nimport * as Api_Product from \"../../../api/products/Api_Product.res.js\";\nimport * as Belt_Option from \"rescript/lib/es6/belt_Option.js\";\nimport * as Caml_option from \"rescript/lib/es6/caml_option.js\";\nimport * as SentryLogger from \"../../../loggers/SentryLogger.res.js\";\nimport * as Globals from \"Common/globals\";\nimport * as CloudinaryWidget from \"../../../bindings/CloudinaryWidget.res.js\";\nimport * as JsxRuntime from \"react/jsx-runtime\";\nimport * as DashboardProductEditorScss from \"./DashboardProductEditor.scss\";\nimport * as ReactCloudinaryUploadWidget from \"react-cloudinary-upload-widget\";\nimport * as DashboardProductEditorImageForm from \"./DashboardProductEditorImageForm.res.js\";\nimport * as DashboardProductEditorVideoForm from \"./DashboardProductEditorVideoForm.res.js\";\nimport * as DashboardProductEditorAssetsTabVideoLinkForm from \"./DashboardProductEditorAssetsTabVideoLinkForm.res.js\";\n\nvar css = DashboardProductEditorScss;\n\nfunction reducer(state, action) {\n  switch (action.TAG) {\n    case \"ToggleDestroyConfirm\" :\n        var id = action._1;\n        if (action._0 === \"Image\") {\n          return {\n                  destroyImageConfirm: !state.destroyImageConfirm,\n                  destroyVideoConfirm: state.destroyVideoConfirm,\n                  currentVideo: state.currentVideo,\n                  currentImage: id,\n                  timeout: state.timeout,\n                  videos: state.videos,\n                  newVideos: state.newVideos,\n                  savedVideos: state.savedVideos,\n                  product: state.product\n                };\n        } else {\n          return {\n                  destroyImageConfirm: state.destroyImageConfirm,\n                  destroyVideoConfirm: !state.destroyVideoConfirm,\n                  currentVideo: id,\n                  currentImage: state.currentImage,\n                  timeout: state.timeout,\n                  videos: state.videos,\n                  newVideos: state.newVideos,\n                  savedVideos: state.savedVideos,\n                  product: state.product\n                };\n        }\n    case \"SetTimeout\" :\n        return {\n                destroyImageConfirm: state.destroyImageConfirm,\n                destroyVideoConfirm: state.destroyVideoConfirm,\n                currentVideo: state.currentVideo,\n                currentImage: state.currentImage,\n                timeout: action._0,\n                videos: state.videos,\n                newVideos: state.newVideos,\n                savedVideos: state.savedVideos,\n                product: state.product\n              };\n    case \"StoreAddedLinkedVideo\" :\n        return {\n                destroyImageConfirm: state.destroyImageConfirm,\n                destroyVideoConfirm: state.destroyVideoConfirm,\n                currentVideo: state.currentVideo,\n                currentImage: state.currentImage,\n                timeout: state.timeout,\n                videos: state.videos,\n                newVideos: state.newVideos,\n                savedVideos: state.savedVideos,\n                product: action._0\n              };\n    \n  }\n}\n\nfunction DashboardProductEditorAssetsTabUploader(props) {\n  var updateProduct = props.updateProduct;\n  var product = props.product;\n  var videos = Video.normalize(props.videos);\n  var initialState_videos = [];\n  var initialState_newVideos = {\n    index: [],\n    dict: undefined\n  };\n  var initialState_savedVideos = {\n    index: videos.index,\n    dict: Belt_Map.map(videos.dict, (function (video) {\n            return [\n                    video,\n                    \"StandBy\"\n                  ];\n          }))\n  };\n  var initialState = {\n    destroyImageConfirm: false,\n    destroyVideoConfirm: false,\n    currentVideo: undefined,\n    currentImage: undefined,\n    timeout: undefined,\n    videos: initialState_videos,\n    newVideos: initialState_newVideos,\n    savedVideos: initialState_savedVideos,\n    product: product\n  };\n  var match = React.useReducer(reducer, initialState);\n  var dispatch = match[1];\n  var state = match[0];\n  var updateTimeout = function (timeout) {\n    var match = state.timeout;\n    if (match !== undefined) {\n      clearTimeout(Belt_Option.getExn(state.timeout));\n      return dispatch({\n                  TAG: \"SetTimeout\",\n                  _0: Caml_option.some(timeout)\n                });\n    } else {\n      return dispatch({\n                  TAG: \"SetTimeout\",\n                  _0: Caml_option.some(timeout)\n                });\n    }\n  };\n  var match$1 = product.images;\n  var match$2 = product.videos;\n  return JsxRuntime.jsxs(\"div\", {\n              children: [\n                JsxRuntime.jsx(\"div\", {\n                      children: JsxRuntime.jsxs(\"div\", {\n                            children: [\n                              JsxRuntime.jsx(ReactCloudinaryUploadWidget.WidgetLoader, {}),\n                              JsxRuntime.jsxs(\"div\", {\n                                    children: [\n                                      \"Click to Upload Images and Videos\",\n                                      JsxRuntime.jsx(ReactCloudinaryUploadWidget.Widget, {\n                                            sources: [\"local\"],\n                                            cloudName: Globals.CloudinaryCloudName,\n                                            apiKey: Globals.CloudinaryAPIKey,\n                                            uploadPreset: Globals.CloudinaryUploadPreset,\n                                            accepts: \"application/json\",\n                                            contentType: \"application/json\",\n                                            folder: \"products/\" + product.slug + \"/images\",\n                                            style: {\n                                              color: \"white\",\n                                              border: \"1px solid\",\n                                              borderColor: \"#18c3bb\",\n                                              borderRadius: \"3px\",\n                                              fontWeight: \"600\",\n                                              backgroundColor: \"#18c3bb\",\n                                              padding: \"8px 20px\",\n                                              fontSize: \"14px\"\n                                            },\n                                            cropping: false,\n                                            multiple: true,\n                                            onSuccess: (function (result) {\n                                                console.log(\"RESULT:\", CloudinaryWidget.fromJson(result));\n                                                var content = CloudinaryWidget.fromJson(result);\n                                                var match = content.info.format;\n                                                var exit = 0;\n                                                switch (match) {\n                                                  case \"jpeg\" :\n                                                  case \"jpg\" :\n                                                  case \"png\" :\n                                                      exit = 2;\n                                                      break;\n                                                  case \"avi\" :\n                                                  case \"mov\" :\n                                                  case \"mp4\" :\n                                                  case \"wmv\" :\n                                                      exit = 1;\n                                                      break;\n                                                  default:\n                                                    exit = 2;\n                                                }\n                                                switch (exit) {\n                                                  case 1 :\n                                                      return $$Promise.wait(Api_Product.createVideo(product.id, {\n                                                                      video: content\n                                                                    }), (function (x) {\n                                                                    if (x.TAG === \"Ok\") {\n                                                                      return updateProduct(x._0);\n                                                                    } else {\n                                                                      return SentryLogger.error1({\n                                                                                  rootModule: \"DashboardProductEditorAssetsTabUploader\",\n                                                                                  subModulePath: /* [] */0,\n                                                                                  value: \"make\",\n                                                                                  fullPath: \"DashboardProductEditorAssetsTabUploader.make\"\n                                                                                }, \"CreateProductVideo::Error\", [\n                                                                                  \"Error\",\n                                                                                  x._0\n                                                                                ]);\n                                                                    }\n                                                                  }));\n                                                  case 2 :\n                                                      return $$Promise.wait(Api_Product.createImage(product.id, {\n                                                                      image: content\n                                                                    }), (function (x) {\n                                                                    if (x.TAG === \"Ok\") {\n                                                                      return updateProduct(x._0);\n                                                                    } else {\n                                                                      return SentryLogger.error1({\n                                                                                  rootModule: \"DashboardProductEditorAssetsTabUploader\",\n                                                                                  subModulePath: /* [] */0,\n                                                                                  value: \"make\",\n                                                                                  fullPath: \"DashboardProductEditorAssetsTabUploader.make\"\n                                                                                }, \"CreateProductImage::Error\", [\n                                                                                  \"Error\",\n                                                                                  x._0\n                                                                                ]);\n                                                                    }\n                                                                  }));\n                                                  \n                                                }\n                                              })\n                                          })\n                                    ],\n                                    className: css.uploaderInner\n                                  })\n                            ],\n                            className: css.uploader\n                          }),\n                      className: css.uploaderContainer\n                    }),\n                JsxRuntime.jsx(DashboardProductEditorAssetsTabVideoLinkForm.make, {\n                      productId: product.id,\n                      videos: state.videos,\n                      addLinkedVideo: (function (product) {\n                          dispatch({\n                                TAG: \"StoreAddedLinkedVideo\",\n                                _0: product\n                              });\n                        }),\n                      updateProduct: updateProduct\n                    }),\n                match$1.length !== 0 ? JsxRuntime.jsxs(\"div\", {\n                        children: [\n                          JsxRuntime.jsx(H3.make, {\n                                children: \"Images\"\n                              }),\n                          JsxRuntime.jsx(\"div\", {\n                                children: Belt_Array.mapWithIndex(product.images, (function (index, image) {\n                                        return JsxRuntime.jsx(DashboardProductEditorImageForm.make, {\n                                                    product: product,\n                                                    image: image,\n                                                    updateProduct: updateProduct,\n                                                    toggleDestroy: (function (id) {\n                                                        dispatch({\n                                                              TAG: \"ToggleDestroyConfirm\",\n                                                              _0: \"Image\",\n                                                              _1: Caml_option.some(id)\n                                                            });\n                                                      }),\n                                                    updateTimeout: (function (timeout) {\n                                                        updateTimeout(timeout);\n                                                      })\n                                                  }, \"image--\" + String(index) + \"--\" + ID.toString(image.id));\n                                      })),\n                                className: css.imagesGrid\n                              })\n                        ],\n                        className: css.imagesContainer\n                      }) : null,\n                match$2.length !== 0 ? JsxRuntime.jsxs(\"div\", {\n                        children: [\n                          JsxRuntime.jsx(H3.make, {\n                                children: \"Videos\"\n                              }),\n                          JsxRuntime.jsx(\"div\", {\n                                children: Belt_Array.mapWithIndex(product.videos, (function (index, video) {\n                                        return JsxRuntime.jsx(DashboardProductEditorVideoForm.make, {\n                                                    product: product,\n                                                    video: video,\n                                                    updateProduct: updateProduct,\n                                                    toggleDestroy: (function (id) {\n                                                        dispatch({\n                                                              TAG: \"ToggleDestroyConfirm\",\n                                                              _0: \"Video\",\n                                                              _1: Caml_option.some(id)\n                                                            });\n                                                      }),\n                                                    updateTimeout: (function (timeout) {\n                                                        updateTimeout(timeout);\n                                                      })\n                                                  }, \"video--\" + String(index) + \"--\" + ID.toString(video.id));\n                                      })),\n                                className: css.videosGrid\n                              })\n                        ],\n                        className: css.videosContainer\n                      }) : null,\n                state.destroyImageConfirm ? JsxRuntime.jsx(\"div\", {\n                        children: JsxRuntime.jsxs(\"div\", {\n                              children: [\n                                JsxRuntime.jsx(\"div\", {\n                                      children: \"Are you sure?\",\n                                      className: css.deleteConfirmationText\n                                    }),\n                                JsxRuntime.jsx(\"div\", {\n                                      children: \"Image will be deleted permanently.\",\n                                      className: css.deleteConfirmationMessage\n                                    }),\n                                JsxRuntime.jsxs(\"div\", {\n                                      children: [\n                                        JsxRuntime.jsx(Button.make, {\n                                              size: \"SM\",\n                                              color: \"Gray\",\n                                              onClick: (function (param) {\n                                                  dispatch({\n                                                        TAG: \"ToggleDestroyConfirm\",\n                                                        _0: \"Image\",\n                                                        _1: undefined\n                                                      });\n                                                }),\n                                              children: \"Cancel\"\n                                            }),\n                                        JsxRuntime.jsx(Button.make, {\n                                              size: \"SM\",\n                                              color: \"Pink\",\n                                              onClick: (function (param) {\n                                                  var productId = product.id;\n                                                  var imageId = Belt_Option.getExn(state.currentImage);\n                                                  $$Promise.wait(Api_Product.deleteImage(productId, imageId), (function (x) {\n                                                          if (x.TAG !== \"Ok\") {\n                                                            return SentryLogger.error1({\n                                                                        rootModule: \"DashboardProductEditorAssetsTabUploader\",\n                                                                        subModulePath: /* [] */0,\n                                                                        value: \"make\",\n                                                                        fullPath: \"DashboardProductEditorAssetsTabUploader.make\"\n                                                                      }, \"DeleteProductImage::Error\", [\n                                                                        \"Error\",\n                                                                        x._0\n                                                                      ]);\n                                                          }\n                                                          updateProduct(x._0);\n                                                          dispatch({\n                                                                TAG: \"ToggleDestroyConfirm\",\n                                                                _0: \"Image\",\n                                                                _1: undefined\n                                                              });\n                                                        }));\n                                                }),\n                                              children: \"Yes, delete it\"\n                                            })\n                                      ],\n                                      className: css.deleteConfirmationButtons\n                                    })\n                              ],\n                              className: css.deleteConfirmationDialog\n                            }),\n                        className: css.deleteConfirmationOverlay,\n                        onClick: (function ($$event) {\n                            $$event.stopPropagation();\n                          })\n                      }) : null,\n                state.destroyVideoConfirm ? JsxRuntime.jsx(\"div\", {\n                        children: JsxRuntime.jsxs(\"div\", {\n                              children: [\n                                JsxRuntime.jsx(\"div\", {\n                                      children: \"Are you sure?\",\n                                      className: css.deleteConfirmationText\n                                    }),\n                                JsxRuntime.jsx(\"div\", {\n                                      children: \"Image will be deleted permanently.\",\n                                      className: css.deleteConfirmationMessage\n                                    }),\n                                JsxRuntime.jsxs(\"div\", {\n                                      children: [\n                                        JsxRuntime.jsx(Button.make, {\n                                              size: \"SM\",\n                                              color: \"Gray\",\n                                              onClick: (function (param) {\n                                                  dispatch({\n                                                        TAG: \"ToggleDestroyConfirm\",\n                                                        _0: \"Video\",\n                                                        _1: undefined\n                                                      });\n                                                }),\n                                              children: \"Cancel\"\n                                            }),\n                                        JsxRuntime.jsx(Button.make, {\n                                              size: \"SM\",\n                                              color: \"Pink\",\n                                              onClick: (function (param) {\n                                                  var productId = product.id;\n                                                  var videoId = Belt_Option.getExn(state.currentVideo);\n                                                  $$Promise.wait(Api_Product.deleteVideo(productId, videoId), (function (x) {\n                                                          if (x.TAG !== \"Ok\") {\n                                                            return SentryLogger.error1({\n                                                                        rootModule: \"DashboardProductEditorAssetsTabUploader\",\n                                                                        subModulePath: /* [] */0,\n                                                                        value: \"make\",\n                                                                        fullPath: \"DashboardProductEditorAssetsTabUploader.make\"\n                                                                      }, \"DeleteProductVideo::Error\", [\n                                                                        \"Error\",\n                                                                        x._0\n                                                                      ]);\n                                                          }\n                                                          updateProduct(x._0);\n                                                          dispatch({\n                                                                TAG: \"ToggleDestroyConfirm\",\n                                                                _0: \"Video\",\n                                                                _1: undefined\n                                                              });\n                                                        }));\n                                                }),\n                                              children: \"Yes, delete it\"\n                                            })\n                                      ],\n                                      className: css.deleteConfirmationButtons\n                                    })\n                              ],\n                              className: css.deleteConfirmationDialog\n                            }),\n                        className: css.deleteConfirmationOverlay,\n                        onClick: (function ($$event) {\n                            $$event.stopPropagation();\n                          })\n                      }) : null\n              ],\n              className: css.container\n            });\n}\n\nvar make = DashboardProductEditorAssetsTabUploader;\n\nexport {\n  css ,\n  reducer ,\n  make ,\n}\n/* css Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Api from \"../../../api/Api.res.js\";\nimport * as Url from \"../../../utils/Url.res.js\";\nimport * as Hooks from \"../../../libs/Hooks.res.js\";\nimport * as React from \"react\";\nimport * as Button from \"../../../styleguide/components/Button/Button.res.js\";\nimport * as $$Promise from \"../../../bindings/Promise.res.js\";\nimport * as SentryLogger from \"../../../loggers/SentryLogger.res.js\";\nimport * as Routes_Product from \"../../../routes/common/Routes_Product.res.js\";\nimport * as ColocationProduct from \"../../../models/ColocationProduct.res.js\";\nimport * as JsxRuntime from \"react/jsx-runtime\";\nimport * as DashboardProductEditorHeader from \"../../common/dashboard/DashboardProductEditorHeader.res.js\";\nimport * as DashboardProductEditorLayout from \"../../common/dashboard/DashboardProductEditorLayout.res.js\";\nimport * as DashboardProductEditorActionBar from \"../../common/dashboard/DashboardProductEditorActionBar.res.js\";\nimport * as DashboardProductEditorAssetsTab from \"../../common/dashboard/DashboardProductEditorAssetsTab.res.js\";\nimport * as DashboardProductEditorContextMenu from \"../../common/dashboard/DashboardProductEditorContextMenu.res.js\";\nimport * as DashboardProductEditorUnarchiveLink from \"../../common/dashboard/DashboardProductEditorUnarchiveLink.res.js\";\nimport * as DashboardProductEditorAssetsTabUploader from \"../../common/dashboard/DashboardProductEditorAssetsTabUploader.res.js\";\nimport * as DashboardProductEditorActiveStatusToggle from \"../../common/dashboard/DashboardProductEditorActiveStatusToggle.res.js\";\n\nfunction DashboardEditProductAssetsTab$DashboardEditProductAssetsTab(props) {\n  var product = props.product;\n  var initialState = React.useMemo((function () {\n          return {\n                  product: product,\n                  status: \"Editing\",\n                  submissionError: false\n                };\n        }), []);\n  var match = Hooks.useReducer(initialState, (function (state, action) {\n          if (typeof action === \"object\") {\n            return {\n                    TAG: \"Update\",\n                    _0: {\n                      product: action._0,\n                      status: state.status,\n                      submissionError: state.submissionError\n                    }\n                  };\n          }\n          switch (action) {\n            case \"PublishProduct\" :\n                return {\n                        TAG: \"UpdateWithSideEffects\",\n                        _0: {\n                          product: state.product,\n                          status: \"Submitting\",\n                          submissionError: state.submissionError\n                        },\n                        _1: (function (param) {\n                            var dispatch = param.dispatch;\n                            $$Promise.wait(Api.publishProduct(product.id), (function (x) {\n                                    if (x.TAG === \"Ok\") {\n                                      return Url.visit(Routes_Product.Dashboard.index);\n                                    }\n                                    SentryLogger.error1({\n                                          rootModule: \"DashboardEditProductAssetsTab\",\n                                          subModulePath: {\n                                            hd: \"DashboardEditProductAssetsTab\",\n                                            tl: /* [] */0\n                                          },\n                                          value: \"make\",\n                                          fullPath: \"DashboardEditProductAssetsTab.DashboardEditProductAssetsTab.make\"\n                                        }, \"DashboardEditProductAssetsTab::PublishProduct::Error\", [\n                                          \"Error\",\n                                          x._0\n                                        ]);\n                                    dispatch(\"FailProductPublishing\");\n                                  }));\n                          })\n                      };\n            case \"ActivateProduct\" :\n                return {\n                        TAG: \"UpdateWithSideEffects\",\n                        _0: {\n                          product: state.product,\n                          status: \"Submitting\",\n                          submissionError: state.submissionError\n                        },\n                        _1: (function (param) {\n                            var dispatch = param.dispatch;\n                            $$Promise.wait(Api.activateProduct(product.id), (function (x) {\n                                    if (x.TAG === \"Ok\") {\n                                      return Url.visit(Routes_Product.Dashboard.index);\n                                    }\n                                    SentryLogger.error1({\n                                          rootModule: \"DashboardEditProductAssetsTab\",\n                                          subModulePath: {\n                                            hd: \"DashboardEditProductAssetsTab\",\n                                            tl: /* [] */0\n                                          },\n                                          value: \"make\",\n                                          fullPath: \"DashboardEditProductAssetsTab.DashboardEditProductAssetsTab.make\"\n                                        }, \"DashboardEditProductAssetsTab::ActivateProduct::Error\", [\n                                          \"Error\",\n                                          x._0\n                                        ]);\n                                    dispatch(\"FailProductActivation\");\n                                  }));\n                          })\n                      };\n            case \"FailProductPublishing\" :\n            case \"FailProductActivation\" :\n                return {\n                        TAG: \"Update\",\n                        _0: {\n                          product: state.product,\n                          status: \"Editing\",\n                          submissionError: true\n                        }\n                      };\n            case \"GoToPreviousTab\" :\n                return {\n                        TAG: \"SideEffects\",\n                        _0: (function (param) {\n                            Url.visit(Routes_Product.Dashboard.editLocation(product.id));\n                          })\n                      };\n            \n          }\n        }));\n  var dispatch = match[1];\n  var state = match[0];\n  var match$1 = state.product.status;\n  var tmp;\n  var exit = 0;\n  switch (match$1) {\n    case \"Active\" :\n        var match$2 = state.status;\n        tmp = JsxRuntime.jsxs(JsxRuntime.Fragment, {\n              children: [\n                JsxRuntime.jsx(DashboardProductEditorActiveStatusToggle.make, {\n                      productId: product.id,\n                      status: \"Active\",\n                      busy: match$2 !== \"Editing\"\n                    }),\n                JsxRuntime.jsx(DashboardProductEditorContextMenu.make, {\n                      product: state.product,\n                      onUpdated: (function (product) {\n                          dispatch({\n                                TAG: \"UpdateProduct\",\n                                _0: product\n                              });\n                        })\n                    })\n              ]\n            });\n        break;\n    case \"Disabled\" :\n        var match$3 = state.status;\n        tmp = JsxRuntime.jsxs(JsxRuntime.Fragment, {\n              children: [\n                JsxRuntime.jsx(DashboardProductEditorActiveStatusToggle.make, {\n                      productId: product.id,\n                      status: \"Disabled\",\n                      busy: match$3 !== \"Editing\"\n                    }),\n                JsxRuntime.jsx(DashboardProductEditorContextMenu.make, {\n                      product: state.product,\n                      onUpdated: (function (product) {\n                          dispatch({\n                                TAG: \"UpdateProduct\",\n                                _0: product\n                              });\n                        })\n                    })\n              ]\n            });\n        break;\n    case \"Draft\" :\n    case \"Expired\" :\n        exit = 1;\n        break;\n    case \"Archived\" :\n        tmp = JsxRuntime.jsx(DashboardProductEditorUnarchiveLink.make, {\n              productId: product.id,\n              onUnarchived: (function (product) {\n                  dispatch({\n                        TAG: \"UpdateProduct\",\n                        _0: product\n                      });\n                })\n            });\n        break;\n    \n  }\n  if (exit === 1) {\n    tmp = JsxRuntime.jsx(DashboardProductEditorContextMenu.make, {\n          product: state.product,\n          onUpdated: (function (product) {\n              dispatch({\n                    TAG: \"UpdateProduct\",\n                    _0: product\n                  });\n            })\n        });\n  }\n  var match$4 = state.product.status;\n  var tmp$1;\n  switch (match$4) {\n    case \"Active\" :\n        tmp$1 = JsxRuntime.jsxs(JsxRuntime.Fragment, {\n              children: [\n                JsxRuntime.jsx(DashboardProductEditorActionBar.Note.make, {\n                      children: \"Changes on this page are being published automatically\"\n                    }),\n                JsxRuntime.jsx(Button.make, {\n                      size: \"LG\",\n                      color: \"Primary\",\n                      expanded: true,\n                      visuallyDisabled: true,\n                      children: \"Save changes\"\n                    })\n              ]\n            });\n        break;\n    case \"Draft\" :\n        var match$5 = state.status;\n        var match$6 = state.status;\n        tmp$1 = JsxRuntime.jsxs(JsxRuntime.Fragment, {\n              children: [\n                JsxRuntime.jsx(DashboardProductEditorActionBar.$$Error.make, {\n                      children: state.submissionError ? \"Something went wrong\" : null\n                    }),\n                JsxRuntime.jsx(Button.make, {\n                      size: \"LG\",\n                      color: \"Primary\",\n                      expanded: true,\n                      disabled: match$5 !== \"Editing\",\n                      busy: match$6 !== \"Editing\",\n                      onClick: (function (param) {\n                          dispatch(\"PublishProduct\");\n                        }),\n                      children: \"Publish product\"\n                    })\n              ]\n            });\n        break;\n    case \"Disabled\" :\n        var match$7 = state.status;\n        var match$8 = state.status;\n        tmp$1 = JsxRuntime.jsxs(JsxRuntime.Fragment, {\n              children: [\n                JsxRuntime.jsx(DashboardProductEditorActionBar.$$Error.make, {\n                      children: state.submissionError ? \"Something went wrong\" : null\n                    }),\n                JsxRuntime.jsx(Button.make, {\n                      size: \"LG\",\n                      color: \"Primary\",\n                      expanded: true,\n                      disabled: match$7 !== \"Editing\",\n                      busy: match$8 !== \"Editing\",\n                      onClick: (function (param) {\n                          dispatch(\"ActivateProduct\");\n                        }),\n                      children: \"Activate product\"\n                    })\n              ]\n            });\n        break;\n    case \"Expired\" :\n    case \"Archived\" :\n        tmp$1 = null;\n        break;\n    \n  }\n  return JsxRuntime.jsxs(DashboardProductEditorLayout.make, {\n              children: [\n                JsxRuntime.jsx(DashboardProductEditorHeader.make, {\n                      product: product,\n                      active: \"AssetsTab\"\n                    }),\n                JsxRuntime.jsxs(DashboardProductEditorAssetsTab.make, {\n                      children: [\n                        JsxRuntime.jsx(DashboardProductEditorAssetsTabUploader.make, {\n                              product: state.product,\n                              updateProduct: (function (product) {\n                                  dispatch({\n                                        TAG: \"UpdateProduct\",\n                                        _0: product\n                                      });\n                                }),\n                              videos: state.product.videos\n                            }),\n                        JsxRuntime.jsxs(DashboardProductEditorActionBar.make, {\n                              children: [\n                                JsxRuntime.jsx(DashboardProductEditorActionBar.ContextControls.make, {\n                                      children: tmp\n                                    }),\n                                tmp$1\n                              ]\n                            })\n                      ]\n                    })\n              ]\n            });\n}\n\nvar DashboardEditProductAssetsTab = {\n  make: DashboardEditProductAssetsTab$DashboardEditProductAssetsTab\n};\n\nfunction DashboardEditProductAssetsTab$default(props) {\n  return JsxRuntime.jsx(DashboardEditProductAssetsTab$DashboardEditProductAssetsTab, {\n              product: ColocationProduct.Draft.fromJs(props.props.product)\n            });\n}\n\nvar $$default = DashboardEditProductAssetsTab$default;\n\nexport {\n  DashboardEditProductAssetsTab ,\n  $$default as default,\n}\n/* Api Not a pure module */\n","import * as React from 'react';\n\nimport DashboardEditProductAssetsTab from './DashboardEditProductAssetsTab.res.js';\n\nexport default ({ context, ...props }) => <DashboardEditProductAssetsTab props={props} context={context} />;\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\n\nfunction youtube() {\n  return /(?:youtube\\.com\\/\\S*(?:(?:\\/e(?:mbed))?\\/|watch\\/?\\?(?:\\S*?&?v\\=))|youtu\\.be\\/)([a-zA-Z0-9_-]{6,11})/g;\n}\n\nfunction vimeo() {\n  return /(http|https)?:\\/\\/(www\\.)?vimeo.com\\/(?:channels\\/(?:\\w+\\/)?|groups\\/([^\\/]*)\\/videos\\/|)(\\d+)(?:|\\/\\?)/;\n}\n\nexport {\n  youtube ,\n  vimeo ,\n}\n/* No side effect */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Cx from \"rescript-classnames/src/Cx.res.js\";\nimport * as HeadingScss from \"./Heading.scss\";\nimport * as JsxRuntime from \"react/jsx-runtime\";\n\nvar css = HeadingScss;\n\nfunction H3(props) {\n  var __className = props.className;\n  var className = __className !== undefined ? __className : \"\";\n  return JsxRuntime.jsx(\"h3\", {\n              children: props.children,\n              className: Cx.cx([\n                    css.h3,\n                    className\n                  ]),\n              id: props.id\n            });\n}\n\nvar make = H3;\n\nexport {\n  css ,\n  make ,\n}\n/* css Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as JsxRuntime from \"react/jsx-runtime\";\n\nfunction Form(props) {\n  var onSubmit = props.onSubmit;\n  return JsxRuntime.jsx(\"form\", {\n              children: props.children,\n              ref: props.setRef,\n              className: props.className,\n              id: props.id,\n              onSubmit: (function ($$event) {\n                  if (onSubmit !== undefined) {\n                    $$event.preventDefault();\n                    return onSubmit($$event);\n                  }\n                  \n                })\n            });\n}\n\nvar make = Form;\n\nexport {\n  make ,\n}\n/* react/jsx-runtime Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as React from \"react\";\nimport * as JsxRuntime from \"react/jsx-runtime\";\n\nfunction ImageWithFallback(props) {\n  var src = props.src;\n  var match = React.useState(function () {\n        return false;\n      });\n  var setErrored = match[1];\n  var errored = match[0];\n  React.useEffect((function () {\n          setErrored(function (param) {\n                return false;\n              });\n        }), [src]);\n  return JsxRuntime.jsx(\"img\", {\n              className: props.className,\n              src: errored ? props.fallbackSrc : src,\n              onError: (function (param) {\n                  if (!errored) {\n                    return setErrored(function (param) {\n                                return true;\n                              });\n                  }\n                  \n                })\n            });\n}\n\nvar make = ImageWithFallback;\n\nexport {\n  make ,\n}\n/* react Not a pure module */\n","// Generated by ReScript, PLEASE EDIT WITH CARE\n\nimport * as Screens from \"../../styles/Screens.res.js\";\nimport * as Cloudinary from \"../../../libs/Cloudinary.res.js\";\nimport * as ImageWithFallback from \"../../components/Image/ImageWithFallback.res.js\";\nimport * as JsxRuntime from \"react/jsx-runtime\";\n\nfunction buildUrl(cropOpt, width, height, src) {\n  var crop = cropOpt !== undefined ? cropOpt : \"Fill\";\n  return Cloudinary.Url.build(\"Png\", {\n              hd: \"Dpr\",\n              tl: {\n                hd: \"Quality\",\n                tl: {\n                  hd: {\n                    TAG: \"Crop\",\n                    _0: crop\n                  },\n                  tl: {\n                    hd: {\n                      TAG: \"FetchFormat\",\n                      _0: \"Png\"\n                    },\n                    tl: {\n                      hd: {\n                        TAG: \"Width\",\n                        _0: width\n                      },\n                      tl: {\n                        hd: {\n                          TAG: \"Height\",\n                          _0: height\n                        },\n                        tl: /* [] */0\n                      }\n                    }\n                  }\n                }\n              }\n            }, src);\n}\n\nfunction Picture(props) {\n  var fallbackSrc = props.fallbackSrc;\n  var imageClassName = props.imageClassName;\n  var crop = props.crop;\n  var small = props.small;\n  var medium = props.medium;\n  var large = props.large;\n  var src = props.src;\n  return JsxRuntime.jsxs(\"picture\", {\n              children: [\n                small !== undefined ? JsxRuntime.jsx(\"source\", {\n                        media: \"(max-width: \" + (String(Screens.medium) + \"px)\"),\n                        srcSet: (function (__x) {\n                              return buildUrl(crop, small[0], small[1], __x);\n                            })(src)\n                      }) : null,\n                medium !== undefined ? JsxRuntime.jsx(\"source\", {\n                        media: \"(max-width: \" + (String(Screens.large) + \"px)\"),\n                        srcSet: buildUrl(crop, medium[0], medium[1], src)\n                      }) : null,\n                fallbackSrc !== undefined ? JsxRuntime.jsx(ImageWithFallback.make, {\n                        src: buildUrl(crop, large[0], large[1], src),\n                        className: imageClassName,\n                        fallbackSrc: buildUrl(crop, large[0], large[1], fallbackSrc)\n                      }) : JsxRuntime.jsx(\"img\", {\n                        className: imageClassName,\n                        src: buildUrl(crop, large[0], large[1], src)\n                      })\n              ],\n              className: props.className\n            });\n}\n\nvar Crop;\n\nvar make = Picture;\n\nexport {\n  Crop ,\n  buildUrl ,\n  make ,\n}\n/* Screens Not a pure module */\n"],"names":["decoder","Json_Decode$JsonCombinators","field","assetId","required","batchId","bytes","createdAt","etag","folder","format","height","id","originalFilename","path","placeholder","publicId","resourceType","secureUrl","signature","tags","thumbnailUrl","type_","url","version","versionId","width","decoder$1","event","info","fromJson$1","json","Belt_Result","Json$JsonCombinators","css","DashboardProductEditorScss","make","props","JsxRuntime","Container","className","addAssetsContainer","children","H2","formTitle","toJson","req","Json_Encode$JsonCombinators","image","video","Video","toString","description","active","createImage","productId","Rest","ID","NAME","VAL","ColocationProduct","undefined","createVideo","deleteImage","imageId","deleteVideo","videoId","updateImage","updateVideo","initialState","input","fieldsStatuses","collectionsStatuses","formStatus","submissionStatus","validateForm","param","param$1","descriptionResult$1","match_0","TAG","_0","match_0$1","match_0$2","output","_1","useForm","initialInput","onSubmit","tmp","memoizedInitialState","React","match","Formality__ReactUpdate","state","action","result","Formality","status","init","result$1","result$2","match$1","validators","error","Caml_option","dispatch","notifyOnSuccess","notifyOnFailure","reset","dismissSubmissionResult","match$2","match$3","nextInput","nextInput$1","nextInput$2","map","error$1","error$2","updateDescription","nextInputFn","nextValue","__x","updateActive","updateUrl","blurDescription","blurActive","blurUrl","descriptionResult","activeResult","urlResult","dirty","valid","submitting","submit","dismissSubmissionError","mapSubmissionError","updateTimeout","toggleDestroy","updateProduct","product","form","cb","$$Promise","Api_Product","position","x","SentryLogger","rootModule","subModulePath","value","fullPath","res","i","Belt_Option","Js_array","Caml_obj","images","Picture","src","large","IconDelete","size","color","viewBoxSize","deleteAsset","onClick","assetOverlay","TextField","disabled","assetInput","onChange","$$event","target","setTimeout","ErrorMessage","descriptionContainer","Cx","inactiveText","Toggle","on","_event","toggleContainer","assetDescription","imageContainer","tmp$1","source","videos","exit","youtubeImage","assetOverlayYoutube","parseUrl","Regex","exec","Belt_Array","prim","submissionError","addLinkedVideo","Hooks","Api","fromYouTube","fromVimeo","IconOk","assetsVideoLinkFormSubmitted","tmp$2","tmp$3","assetsVideoLinkFormError","Form","assetsVideoLinkForm","Label","forId","Button","busy","assetsVideoLinkFormRow","reducer","destroyImageConfirm","destroyVideoConfirm","currentVideo","currentImage","timeout","newVideos","savedVideos","index","dict","Belt_Map","clearTimeout","ReactCloudinaryUploadWidget","sources","cloudName","Globals","apiKey","uploadPreset","accepts","contentType","slug","style","border","borderColor","borderRadius","fontWeight","backgroundColor","padding","fontSize","cropping","multiple","onSuccess","console","log","CloudinaryWidget","content","uploaderInner","uploader","uploaderContainer","DashboardProductEditorAssetsTabVideoLinkForm","length","H3","DashboardProductEditorImageForm","String","imagesGrid","imagesContainer","DashboardProductEditorVideoForm","videosGrid","videosContainer","deleteConfirmationText","deleteConfirmationMessage","deleteConfirmationButtons","deleteConfirmationDialog","deleteConfirmationOverlay","stopPropagation","container","DashboardEditProductAssetsTab$DashboardEditProductAssetsTab","Url","Routes_Product","hd","tl","editLocation","DashboardProductEditorActiveStatusToggle","DashboardProductEditorContextMenu","onUpdated","DashboardProductEditorUnarchiveLink","onUnarchived","DashboardProductEditorActionBar","expanded","visuallyDisabled","match$5","match$6","match$7","match$8","DashboardProductEditorLayout","DashboardProductEditorHeader","DashboardProductEditorAssetsTab","DashboardProductEditorAssetsTabUploader","$$default","fromJs","_ref","context","_objectWithoutProperties","_excluded","DashboardEditProductAssetsTab","youtube","vimeo","HeadingScss","__className","h3","ref","setRef","preventDefault","setErrored","errored","fallbackSrc","onError","buildUrl","cropOpt","crop","Cloudinary","build","imageClassName","small","medium","media","Screens","srcSet","ImageWithFallback"],"sourceRoot":""}