@clickview/lite 0.48.0-rc.7 → 0.48.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/dist/bundles.json +1 -1
  2. package/dist/scripts/{170-1f815b85a1-lite.chunk.js → 170-2d124965b7-lite.chunk.js} +2 -2
  3. package/dist/scripts/{170-1f815b85a1-lite.chunk.js.map → 170-2d124965b7-lite.chunk.js.map} +1 -1
  4. package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js → 1818-72409e60a9-lite.chunk.js} +1 -1
  5. package/dist/scripts/{1818-b9f9297d6d-lite.chunk.js.map → 1818-72409e60a9-lite.chunk.js.map} +1 -1
  6. package/dist/scripts/{1863-cf9df40052-lite.chunk.js → 1863-e7c4a6f342-lite.chunk.js} +1 -1
  7. package/dist/scripts/{1863-cf9df40052-lite.chunk.js.map → 1863-e7c4a6f342-lite.chunk.js.map} +1 -1
  8. package/dist/scripts/{1958-9889c1ad24-lite.chunk.js → 1958-5336189397-lite.chunk.js} +1 -1
  9. package/dist/scripts/{1958-9889c1ad24-lite.chunk.js.map → 1958-5336189397-lite.chunk.js.map} +1 -1
  10. package/dist/scripts/{2086-a247f6e201-lite.chunk.js → 2086-f7082703d0-lite.chunk.js} +1 -1
  11. package/dist/scripts/{2086-a247f6e201-lite.chunk.js.map → 2086-f7082703d0-lite.chunk.js.map} +1 -1
  12. package/dist/scripts/{2118-462a279c5a-lite.chunk.js → 2118-ec2a5f1e9b-lite.chunk.js} +2 -2
  13. package/dist/scripts/{2118-462a279c5a-lite.chunk.js.map → 2118-ec2a5f1e9b-lite.chunk.js.map} +1 -1
  14. package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js → 2182-8e4d603a1b-lite.chunk.js} +1 -1
  15. package/dist/scripts/{2182-5c9db07f5b-lite.chunk.js.map → 2182-8e4d603a1b-lite.chunk.js.map} +1 -1
  16. package/dist/scripts/{2279-5e92c84310-lite.chunk.js → 2279-252e92e1d8-lite.chunk.js} +1 -1
  17. package/dist/scripts/{2279-5e92c84310-lite.chunk.js.map → 2279-252e92e1d8-lite.chunk.js.map} +1 -1
  18. package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js → 2355-c588dc3ce2-lite.chunk.js} +1 -1
  19. package/dist/scripts/{2355-6cd89fa80d-lite.chunk.js.map → 2355-c588dc3ce2-lite.chunk.js.map} +1 -1
  20. package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js → 2469-46411b862e-lite.chunk.js} +1 -1
  21. package/dist/scripts/{2469-aa5bbbb17f-lite.chunk.js.map → 2469-46411b862e-lite.chunk.js.map} +1 -1
  22. package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js → 2672-b01985cee8-lite.chunk.js} +1 -1
  23. package/dist/scripts/{2672-0fc559f1d1-lite.chunk.js.map → 2672-b01985cee8-lite.chunk.js.map} +1 -1
  24. package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js → 2734-6a7beb2ce2-lite.chunk.js} +1 -1
  25. package/dist/scripts/{2734-6c6d57d0f3-lite.chunk.js.map → 2734-6a7beb2ce2-lite.chunk.js.map} +1 -1
  26. package/dist/scripts/{287-ba98be7f21-lite.chunk.js → 287-3cbed16363-lite.chunk.js} +1 -1
  27. package/dist/scripts/{287-ba98be7f21-lite.chunk.js.map → 287-3cbed16363-lite.chunk.js.map} +1 -1
  28. package/dist/scripts/{2875-0e5f209e47-lite.chunk.js → 2875-aefd69a61f-lite.chunk.js} +1 -1
  29. package/dist/scripts/{2875-0e5f209e47-lite.chunk.js.map → 2875-aefd69a61f-lite.chunk.js.map} +1 -1
  30. package/dist/scripts/{3042-6650521d8b-lite.chunk.js → 3042-7c1b5e4ff7-lite.chunk.js} +1 -1
  31. package/dist/scripts/{3042-6650521d8b-lite.chunk.js.map → 3042-7c1b5e4ff7-lite.chunk.js.map} +1 -1
  32. package/dist/scripts/{3158-31baada6cc-lite.chunk.js → 3158-2147de456d-lite.chunk.js} +1 -1
  33. package/dist/scripts/{3158-31baada6cc-lite.chunk.js.map → 3158-2147de456d-lite.chunk.js.map} +1 -1
  34. package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js → 3296-f3732c93d9-lite.chunk.js} +1 -1
  35. package/dist/scripts/{3296-6d80e4dd56-lite.chunk.js.map → 3296-f3732c93d9-lite.chunk.js.map} +1 -1
  36. package/dist/scripts/{3541-7ebd9db295-lite.chunk.js → 3541-15581012d3-lite.chunk.js} +1 -1
  37. package/dist/scripts/{3541-7ebd9db295-lite.chunk.js.map → 3541-15581012d3-lite.chunk.js.map} +1 -1
  38. package/dist/scripts/{3841-95df66e647-lite.chunk.js → 3841-bfae79638b-lite.chunk.js} +2 -2
  39. package/dist/scripts/{3841-95df66e647-lite.chunk.js.map → 3841-bfae79638b-lite.chunk.js.map} +1 -1
  40. package/dist/scripts/{3888-0bee9a9309-lite.chunk.js → 3888-87c1075a1b-lite.chunk.js} +1 -1
  41. package/dist/scripts/{3888-0bee9a9309-lite.chunk.js.map → 3888-87c1075a1b-lite.chunk.js.map} +1 -1
  42. package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js → 4138-b9b03c9900-lite.chunk.js} +1 -1
  43. package/dist/scripts/{4138-75a2bb69ab-lite.chunk.js.map → 4138-b9b03c9900-lite.chunk.js.map} +1 -1
  44. package/dist/scripts/{4778-ebe369973c-lite.chunk.js → 4778-3c9f2b7f76-lite.chunk.js} +2 -2
  45. package/dist/scripts/{4778-ebe369973c-lite.chunk.js.map → 4778-3c9f2b7f76-lite.chunk.js.map} +1 -1
  46. package/dist/scripts/{4942-a27a31e79e-lite.chunk.js → 4942-acce40b333-lite.chunk.js} +2 -2
  47. package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.map → 4942-acce40b333-lite.chunk.js.map} +1 -1
  48. package/dist/scripts/{5075-f8719465be-lite.chunk.js → 5075-53172298fe-lite.chunk.js} +1 -1
  49. package/dist/scripts/{5075-f8719465be-lite.chunk.js.map → 5075-53172298fe-lite.chunk.js.map} +1 -1
  50. package/dist/scripts/{5157-cd12e2e443-lite.chunk.js → 5157-47a0f5c088-lite.chunk.js} +1 -1
  51. package/dist/scripts/{5157-cd12e2e443-lite.chunk.js.map → 5157-47a0f5c088-lite.chunk.js.map} +1 -1
  52. package/dist/scripts/{5268-f4db3933ff-lite.chunk.js → 5268-9b7560f3b1-lite.chunk.js} +2 -2
  53. package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.map → 5268-9b7560f3b1-lite.chunk.js.map} +1 -1
  54. package/dist/scripts/{5442-01ffd95162-lite.chunk.js → 5442-5ddfa2d951-lite.chunk.js} +1 -1
  55. package/dist/scripts/{5442-01ffd95162-lite.chunk.js.map → 5442-5ddfa2d951-lite.chunk.js.map} +1 -1
  56. package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js → 5591-119d72ede5-lite.chunk.js} +1 -1
  57. package/dist/scripts/{5591-98cfe6c6e5-lite.chunk.js.map → 5591-119d72ede5-lite.chunk.js.map} +1 -1
  58. package/dist/scripts/{5595-3763b14d77-lite.chunk.js → 5595-628d4f252c-lite.chunk.js} +2 -2
  59. package/dist/scripts/5595-628d4f252c-lite.chunk.js.map +1 -0
  60. package/dist/scripts/{6102-4d948a5e48-lite.chunk.js → 6102-751dbbbf33-lite.chunk.js} +3 -3
  61. package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.map → 6102-751dbbbf33-lite.chunk.js.map} +1 -1
  62. package/dist/scripts/{6158-0c5e44f800-lite.chunk.js → 6158-d123add596-lite.chunk.js} +1 -1
  63. package/dist/scripts/{6158-0c5e44f800-lite.chunk.js.map → 6158-d123add596-lite.chunk.js.map} +1 -1
  64. package/dist/scripts/{6263-8957d50afe-lite.chunk.js → 6263-24e67b7df2-lite.chunk.js} +1 -1
  65. package/dist/scripts/{6263-8957d50afe-lite.chunk.js.map → 6263-24e67b7df2-lite.chunk.js.map} +1 -1
  66. package/dist/scripts/{6330-c66465bd6d-lite.chunk.js → 6330-9a2a5fc07e-lite.chunk.js} +1 -1
  67. package/dist/scripts/{6330-c66465bd6d-lite.chunk.js.map → 6330-9a2a5fc07e-lite.chunk.js.map} +1 -1
  68. package/dist/scripts/{671-003843ca84-lite.chunk.js → 671-5571f33165-lite.chunk.js} +1 -1
  69. package/dist/scripts/{671-003843ca84-lite.chunk.js.map → 671-5571f33165-lite.chunk.js.map} +1 -1
  70. package/dist/scripts/{7167-efe85af16e-lite.chunk.js → 7167-dc4c954c2b-lite.chunk.js} +1 -1
  71. package/dist/scripts/{7167-efe85af16e-lite.chunk.js.map → 7167-dc4c954c2b-lite.chunk.js.map} +1 -1
  72. package/dist/scripts/7293-58f4a7cf47-lite.chunk.js +2 -0
  73. package/dist/scripts/{7293-afd3349468-lite.chunk.js.map → 7293-58f4a7cf47-lite.chunk.js.map} +1 -1
  74. package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js → 7301-7c9342ef0c-lite.chunk.js} +1 -1
  75. package/dist/scripts/{7301-f20e4bdb8f-lite.chunk.js.map → 7301-7c9342ef0c-lite.chunk.js.map} +1 -1
  76. package/dist/scripts/{7708-ece31b78a9-lite.chunk.js → 7708-e91903481a-lite.chunk.js} +1 -1
  77. package/dist/scripts/{7708-ece31b78a9-lite.chunk.js.map → 7708-e91903481a-lite.chunk.js.map} +1 -1
  78. package/dist/scripts/{771-eb60e33941-lite.chunk.js → 771-5612b4ffc2-lite.chunk.js} +2 -2
  79. package/dist/scripts/{771-eb60e33941-lite.chunk.js.map → 771-5612b4ffc2-lite.chunk.js.map} +1 -1
  80. package/dist/scripts/{7855-37bcdd134e-lite.chunk.js → 7855-4b69540a71-lite.chunk.js} +1 -1
  81. package/dist/scripts/{7855-37bcdd134e-lite.chunk.js.map → 7855-4b69540a71-lite.chunk.js.map} +1 -1
  82. package/dist/scripts/{8024-66413cc05b-lite.chunk.js → 8024-765a4170c7-lite.chunk.js} +2 -2
  83. package/dist/scripts/{8024-66413cc05b-lite.chunk.js.map → 8024-765a4170c7-lite.chunk.js.map} +1 -1
  84. package/dist/scripts/{823-58d27c255b-lite.chunk.js → 823-33c5207c68-lite.chunk.js} +1 -1
  85. package/dist/scripts/{823-58d27c255b-lite.chunk.js.map → 823-33c5207c68-lite.chunk.js.map} +1 -1
  86. package/dist/scripts/8261-69854ff4d5-lite.chunk.js +2 -0
  87. package/dist/scripts/8261-69854ff4d5-lite.chunk.js.map +1 -0
  88. package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js → 8466-cea62163e8-lite.chunk.js} +1 -1
  89. package/dist/scripts/{8466-ee9d40ee97-lite.chunk.js.map → 8466-cea62163e8-lite.chunk.js.map} +1 -1
  90. package/dist/scripts/{8681-41edd08b98-lite.chunk.js → 8681-49db3daae6-lite.chunk.js} +2 -2
  91. package/dist/scripts/{8681-41edd08b98-lite.chunk.js.map → 8681-49db3daae6-lite.chunk.js.map} +1 -1
  92. package/dist/scripts/{8772-9ae4d77363-lite.chunk.js → 8772-6c11095cea-lite.chunk.js} +1 -1
  93. package/dist/scripts/{8772-9ae4d77363-lite.chunk.js.map → 8772-6c11095cea-lite.chunk.js.map} +1 -1
  94. package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js → 8906-2f6b5e4c5c-lite.chunk.js} +2 -2
  95. package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.map → 8906-2f6b5e4c5c-lite.chunk.js.map} +1 -1
  96. package/dist/scripts/{920-4de8efbcf1-lite.chunk.js → 920-acc6596891-lite.chunk.js} +1 -1
  97. package/dist/scripts/{920-4de8efbcf1-lite.chunk.js.map → 920-acc6596891-lite.chunk.js.map} +1 -1
  98. package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js → 9212-cc987a13bf-lite.chunk.js} +1 -1
  99. package/dist/scripts/{9212-8f95fbd9b9-lite.chunk.js.map → 9212-cc987a13bf-lite.chunk.js.map} +1 -1
  100. package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js → 9242-144e7728ad-lite.chunk.js} +1 -1
  101. package/dist/scripts/{9242-2e533bdc0d-lite.chunk.js.map → 9242-144e7728ad-lite.chunk.js.map} +1 -1
  102. package/dist/scripts/{9264-d2285d4310-lite.chunk.js → 9264-518952f13f-lite.chunk.js} +1 -1
  103. package/dist/scripts/{9264-d2285d4310-lite.chunk.js.map → 9264-518952f13f-lite.chunk.js.map} +1 -1
  104. package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js → 9478-4b3c088537-lite.chunk.js} +2 -2
  105. package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.map → 9478-4b3c088537-lite.chunk.js.map} +1 -1
  106. package/dist/scripts/{9484-be04a34bbf-lite.chunk.js → 9484-b85011dbea-lite.chunk.js} +2 -2
  107. package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.map → 9484-b85011dbea-lite.chunk.js.map} +1 -1
  108. package/dist/scripts/{bundle-8f540a1154.min.js → bundle-c158cdd3a9.min.js} +3 -3
  109. package/dist/scripts/{bundle-8f540a1154.min.js.map → bundle-c158cdd3a9.min.js.map} +1 -1
  110. package/package.json +1 -1
  111. package/dist/scripts/5595-3763b14d77-lite.chunk.js.map +0 -1
  112. package/dist/scripts/7293-afd3349468-lite.chunk.js +0 -2
  113. package/dist/scripts/8261-72453f1978-lite.chunk.js +0 -2
  114. package/dist/scripts/8261-72453f1978-lite.chunk.js.map +0 -1
  115. /package/dist/scripts/{170-1f815b85a1-lite.chunk.js.LICENSE.txt → 170-2d124965b7-lite.chunk.js.LICENSE.txt} +0 -0
  116. /package/dist/scripts/{2118-462a279c5a-lite.chunk.js.LICENSE.txt → 2118-ec2a5f1e9b-lite.chunk.js.LICENSE.txt} +0 -0
  117. /package/dist/scripts/{3841-95df66e647-lite.chunk.js.LICENSE.txt → 3841-bfae79638b-lite.chunk.js.LICENSE.txt} +0 -0
  118. /package/dist/scripts/{4778-ebe369973c-lite.chunk.js.LICENSE.txt → 4778-3c9f2b7f76-lite.chunk.js.LICENSE.txt} +0 -0
  119. /package/dist/scripts/{4942-a27a31e79e-lite.chunk.js.LICENSE.txt → 4942-acce40b333-lite.chunk.js.LICENSE.txt} +0 -0
  120. /package/dist/scripts/{5268-f4db3933ff-lite.chunk.js.LICENSE.txt → 5268-9b7560f3b1-lite.chunk.js.LICENSE.txt} +0 -0
  121. /package/dist/scripts/{6102-4d948a5e48-lite.chunk.js.LICENSE.txt → 6102-751dbbbf33-lite.chunk.js.LICENSE.txt} +0 -0
  122. /package/dist/scripts/{771-eb60e33941-lite.chunk.js.LICENSE.txt → 771-5612b4ffc2-lite.chunk.js.LICENSE.txt} +0 -0
  123. /package/dist/scripts/{8024-66413cc05b-lite.chunk.js.LICENSE.txt → 8024-765a4170c7-lite.chunk.js.LICENSE.txt} +0 -0
  124. /package/dist/scripts/{8681-41edd08b98-lite.chunk.js.LICENSE.txt → 8681-49db3daae6-lite.chunk.js.LICENSE.txt} +0 -0
  125. /package/dist/scripts/{8906-b75b51bd0f-lite.chunk.js.LICENSE.txt → 8906-2f6b5e4c5c-lite.chunk.js.LICENSE.txt} +0 -0
  126. /package/dist/scripts/{9478-8eacf2fe47-lite.chunk.js.LICENSE.txt → 9478-4b3c088537-lite.chunk.js.LICENSE.txt} +0 -0
  127. /package/dist/scripts/{9484-be04a34bbf-lite.chunk.js.LICENSE.txt → 9484-b85011dbea-lite.chunk.js.LICENSE.txt} +0 -0
  128. /package/dist/scripts/{bundle-8f540a1154.min.js.LICENSE.txt → bundle-c158cdd3a9.min.js.LICENSE.txt} +0 -0
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/2118-462a279c5a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/form-field.scss","file:///app/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/hooks/UseHandleDialogError.ts","file:///app/packages/libs/shared/src/utils/FormHelper.ts","file:///app/packages/projects/lite/src/apps/my-videos/flight-requests/MyVideosRequests.ts","file:///app/packages/projects/lite/src/apps/my-videos/views/rename-folder/RenameFolderForm.tsx","file:///app/packages/projects/lite/src/apps/my-videos/views/rename-folder/RenameFolderView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span>&nbsp;</span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface CharacterCounterProps<Values extends HashObject> {\n fieldName: keyof Values;\n limit: number;\n}\n\nexport function CharacterCounter<Values extends HashObject>(props: CharacterCounterProps<Values>): JSX.Element {\n const { values } = useFormikContext<Values>();\n\n const field = values[props.fieldName];\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className='form-group'>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className='d-flex align-items-center'>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'>&nbsp;<Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n\n <FieldWrapper {...fieldWrapperProps} />\n\n {!!infoText &&\n <Form.Text className='text-secondary'>\n {infoText}\n </Form.Text>\n }\n\n <ErrorMessage name={fieldProps.name}>\n {(errorMessage: string) => <Form.Control.Feedback type='invalid'>{errorMessage}</Form.Control.Feedback>}\n </ErrorMessage>\n </Form.Group>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\n\nimport { UnspecifiedDialogError } from 'libs/shared/errors/general/unspecified-dialog/UnspecifiedDialogError';\n\nexport function useHandleDialogError(...statusCodes: HttpStatus[]): void {\n React.useEffect(() => {\n if (!statusCodes.length)\n return;\n\n const hasErrorCode = statusCodes.some(Core.ErrorHelper.isStatusCodeError);\n\n if (!hasErrorCode)\n return;\n\n Core.ErrorHelper.throw(new UnspecifiedDialogError());\n }, statusCodes);\n}","import { FormikErrors, FormikTouched, getIn } from 'formik';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\n\nfunction getTypeSize(type: string, size: FormSize) {\n let className = '';\n\n switch (type) {\n case 'select':\n className = 'form-select';\n break;\n default:\n className = 'form-control';\n }\n\n if (size === 'sm')\n className += ` ${className}-sm`;\n\n if (size === 'lg')\n className += ` ${className}-lg`;\n\n return className;\n}\n\nexport const FormHelper = {\n getCustomFormControlClassName<T>(\n errors: FormikErrors<T>,\n touched: FormikTouched<T>,\n attribute: string,\n size?: FormSize,\n additionalClassName?: string,\n type?: string\n ): string {\n let className = '';\n\n className = getTypeSize(type, size);\n\n // Using getIn as it supports dot notation\n if (getIn(touched, attribute) && getIn(errors, attribute))\n className += ' is-invalid';\n\n if (additionalClassName)\n className += ` ${additionalClassName}`;\n\n return className;\n }\n};","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\n\nimport { AddFolderRequest } from 'apps/my-videos/interfaces/requests/AddFolderRequest';\nimport { AddToExchangeRequest } from 'apps/my-videos/interfaces/requests/AddToExchangeRequest';\nimport { MoveFolderRequest } from 'apps/my-videos/interfaces/requests/MoveFolderRequest';\nimport { MoveVideoRequest } from 'apps/my-videos/interfaces/requests/MoveVideoRequest';\n\nexport const MyVideosRequests = {\n videos(id: string, cursor?: string, typeFilter?: SearchIndices | SearchIndices[]): Flight.Request {\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const videoQuery = `videos[${VIDEO_COLLECTION}]{libraries.typeid:${MasterType.WorkspaceCollection}}`;\n const clipQuery = `clips[${CLIP_COLLECTION}]{status:${CurationStatus.Published}}`;\n const interactiveQuery = `interactives[${INTERACTIVE}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`;\n\n const query = [];\n if (typeFilter?.length) {\n if (typeFilter.includes('video'))\n query.push(videoQuery);\n if (typeFilter.includes('clip'))\n query.push(clipQuery);\n if (typeFilter.includes('interactive'))\n query.push(interactiveQuery);\n } else {\n query.push(videoQuery, clipQuery, interactiveQuery);\n }\n\n const params: HashObject = {\n query: `(${query.join('|')}){orderbydesc:timestamp}`,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}/members`, params),\n key: `my:videos:${id}:${cursor}${typeFilter ? `:${Array.isArray(typeFilter) ? typeFilter.join(':') : typeFilter}` : ''}`\n };\n },\n\n workspaceWithCategories(): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['workspace'],\n maxCategoryDepth: 6\n }),\n key: 'workspace:folders',\n normalize: false\n };\n },\n\n exchangeWithCategories(): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['exchange'],\n maxCategoryDepth: 5\n }),\n key: 'exchange:folders',\n normalize: false\n };\n },\n\n addFolder(data: AddFolderRequest): Flight.Request {\n // TODO: Need to stop using domain\n let url = `/api/domain/v2/collections/${data.collectionId}/categories`;\n\n if (data.parentCategoryId)\n url = UrlHelper.urlBuilder(url, { parentCategoryId: data.parentCategoryId });\n\n return {\n url,\n key: 'add:folder',\n type: HttpVerbs.POST,\n data: { name: data.name },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n deleteFolder(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'delete:folder',\n type: HttpVerbs.DELETE,\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n moveFolder(data: MoveFolderRequest): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: '/api/domain/v2/objects/move',\n key: 'move:folder',\n type: HttpVerbs.POST,\n data: {\n assocType: 'has',\n newCollectionId: data.newFolderId,\n oldCollectionId: data.oldFolderId,\n objectIds: [data.moveFolderId]\n },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n updateFolder(id: string, name: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'rename:folder',\n type: HttpVerbs.PUT,\n data: { name },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n videoFolders(videoId: string, libraryId: string): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: `/api/domain/v2/objects/${videoId}/categories?query=libraries{id:${libraryId}}`,\n key: `video:folders:${videoId}`\n };\n },\n\n moveVideo(request: MoveVideoRequest): Flight.Request {\n const data: HashObject = {\n newCollectionId: request.newFolderId,\n oldCollectionId: request.oldFolderId,\n objectIds: request.videoId\n };\n\n return {\n url: '/api/domain/v3/objects/move',\n key: `move:folder:${data.objectIds.join(',')}`,\n type: HttpVerbs.POST,\n data,\n invalidationKeys: ['video']\n };\n },\n\n addToExchange(data: AddToExchangeRequest): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/videos/exchange',\n key: 'add:to:exchange',\n type: HttpVerbs.POST,\n data\n };\n }\n};","import React from 'react';\nimport { Form, useFormikContext } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\n\nconst namespace = 'myVideos.renameFolder';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const RenameFolderValidationSchema = Yup.object().shape({\n name: Yup\n .string()\n .required(() => getPhrase('nameRequired'))\n .max(255, () => getPhrase('maxNameLength'))\n});\n\nexport interface RenameFolderFormData {\n name: string;\n}\n\ninterface RenameFolderFormProps {\n onClickCancel: () => void;\n showSpinner: boolean;\n}\n\nexport function MoveFolderForm(props: RenameFolderFormProps): JSX.Element {\n const formikProps = useFormikContext<RenameFolderFormData>();\n\n return (\n <Form>\n <FormField\n label={getPhrase('name')}\n type='text'\n name='name'\n id='name'\n placeholder={getPhrase('placeholder')}\n autoFocus\n value={formikProps.values.name}\n required\n />\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.onClickCancel} />\n <PopupButtons.Submit variant='dark' showSpinner={props.showSpinner} text={getPhrase('renameFolder')} />\n </PopupButtons>\n </Form>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleDialogError } from 'libs/shared/hooks/UseHandleDialogError';\nimport { Folder, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { MyVideosRequests } from 'apps/my-videos/flight-requests/MyVideosRequests';\n\nimport { MoveFolderForm, RenameFolderFormData, RenameFolderValidationSchema } from './RenameFolderForm';\n\nconst namespace = 'myVideos.renameFolder';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface RenameFolderViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function RenameFolderView(props: RenameFolderViewProps): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const folder = Flight.useBasicFetch<Folder>(LibraryRequests.folder(props.id));\n\n useHandleDialogError(folder.statusCode);\n \n async function onSubmit(data: RenameFolderFormData): Promise<void> {\n setShowSpinner(true);\n\n try {\n await fetchAsync(MyVideosRequests.updateFolder(folder.data.id, data.name));\n alerts.success(getPhrase('success'));\n props.closePopup();\n\n AnalyticsHelper.logUserAction({\n id: folder.data.id,\n name: data.name,\n oldName: folder.data.name\n }, {\n entity: EntityType.Folder,\n actionType: UserAction.Rename,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Popup\n });\n } catch {\n alerts.success(getPhrase('error'));\n props.closePopup();\n }\n }\n\n const hasLoaded = (\n folder.hasCompleted\n );\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={props.closePopup}\n showLoadingSpinner={!hasLoaded}\n >\n {hasLoaded &&\n <FormWrapper<RenameFolderFormData>\n initialValues={{ name: folder.data.name }}\n validationSchema={RenameFolderValidationSchema}\n onSubmit={onSubmit}\n validateOnMount\n >\n <MoveFolderForm\n onClickCancel={props.closePopup}\n showSpinner={showSpinner}\n />\n </FormWrapper>\n }\n </Popup>\n );\n}"],"names":["FormCheckbox","props","label","checkboxLabelClassName","checkboxLabelFontWeight","className","fieldProps","Form","FieldWrapper","htmlFor","id","checkboxAppLink","checkboxAppLinkText","AppLink","appLink","CharacterCounter","field","values","fieldName","length","limit","namespace","children","showLoadingSpinner","type","setType","resolvedChildren","FunctionHelper","f","ObjectHelper","Spinner","animation","size","containerClassName","disabled","SvgContainer","svgName","onClick","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","name","as","title","tooltipPlacement","tooltipSpanHack","Text","phrase","maxLength","errorMessage","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formikProps","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","key","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","options","reset","entries","value","useFormikContextWrapper","useHandleDialogError","statusCodes","some","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","MyVideosRequests","videos","cursor","typeFilter","VIDEO_COLLECTION","CLIP_COLLECTION","INTERACTIVE","videoQuery","clipQuery","interactiveQuery","query","includes","push","params","join","permissionFilterOption","url","Array","isArray","workspaceWithCategories","maxCategoryDepth","normalize","exchangeWithCategories","addFolder","data","collectionId","parentCategoryId","invalidationKeys","deleteFolder","moveFolder","assocType","newCollectionId","newFolderId","oldCollectionId","oldFolderId","objectIds","moveFolderId","updateFolder","videoFolders","videoId","libraryId","moveVideo","request","addToExchange","getPhrase","LanguageService","RenameFolderValidationSchema","shape","required","max","MoveFolderForm","placeholder","autoFocus","PopupButtons","onClickCancel","variant","showSpinner","text","RenameFolderView","setShowSpinner","fetchAsync","alerts","folder","LibraryRequests","statusCode","hasLoaded","hasCompleted","Popup","closePopup","success","AnalyticsHelper","oldName","entity","actionType","workflowPhase","location","validateOnMount"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/2118-ec2a5f1e9b-lite.chunk.js","mappings":";wiBAWM,SAAUA,EAAaC,GAC3B,IAAQC,EAAqFD,EAArFC,MAAOC,EAA8EF,EAA9EE,uBAAwBC,EAAsDH,EAAtDG,wBAAyBC,EAA6BJ,EAA7BI,UAAcC,EAAU,EAAKL,EAAvF,0EAEN,OACE,gBAACM,EAAA,QAAU,CAACF,UAAU,cACpB,uBAAKA,UAAS,qBAAgBA,GAAa,KACzC,gBAACG,EAAY,eAACH,UAAU,oBAAuBC,IAC/C,gBAACC,EAAA,QAAU,CACTF,UAAS,0CAAiE,WAA5BD,EAAuC,YAAc,GAAE,wBACnGD,GACFM,QAASH,EAAWI,IAEnBR,GAEFD,EAAMU,iBAAmBV,EAAMW,qBAC9B,gCACE,iCACA,gBAACC,EAAA,EAAO,CAACC,QAASb,EAAMU,gBAAiBN,UAAU,aAChDJ,EAAMW,uBAOrB,iDC1BM,SAAUG,EAA4Cd,GAC1D,IAEMe,GAFa,UAAXC,OAEahB,EAAMiB,WAE3B,MAAqB,iBAAVF,EACF,iCAGP,uBAAKX,UAAU,sCACZW,EAAMG,OAAM,IAAGlB,EAAMmB,MAAK,cAGjC,CCtBA,SAAgB,eAAiB,QAAQ,cAAgB,QAAQ,kBAAoB,QAAQ,0BAA4B,QAAQ,YAAc,QAAQ,QAAU,mcCmB3JC,EAAY,mBAiCZ,SAAUb,EACdP,GAEA,QAAQqB,EAAgDrB,EAAhDqB,SAAUC,EAAsCtB,EAAtCsB,mBAAuBjB,EAAU,EAAKL,EAAlD,mCAE8C,KAA1B,WAAeA,EAAMuB,QAAK,o5BAA5CA,EAAI,KAAEC,EAAO,KASfC,EAAmBC,EAAA,aAA0BL,GAC/C,SAACM,GAAa,OAAKN,EAASM,EAAE,EAC9B,iBAAqBN,GAAYA,EAAW,KAEhD,GAAwB,aAApBhB,EAAWkB,KACb,OAAID,EAEA,uBAAKlB,UAAU,qBACb,gBAAC,KAAK,iBAAMwB,EAAA,OAAkBvB,EAAY,CAAC,cACxCoB,GAGH,uBAAKrB,UAAW,WACd,gBAACyB,EAAA,EAAO,CAACC,UAAU,SAASC,KAAK,SAOvC,gBAAC,KAAK,iBAAMH,EAAA,OAAkBvB,EAAY,CAAC,cACxCoB,GAKP,IAAIO,EAAqB,qBAAH,OAAwB,qBAY9C,OAVI3B,EAAWD,YACb4B,GAAsB,IAAJ,OAAQ3B,EAAWD,YAEnCC,EAAW4B,WACbD,GAAsB,IAAJ,OAAQ,8BAO1B,uBAAK5B,UAAW4B,GACd,gBAAC,KAAK,iBACCJ,EAAA,OAAkBvB,EAAY,CAAE,WAAY,OAAQ,cAAe,CACxEkB,KAAMA,EACNnB,UAAS,UAAK,gBAAoB,gDAEjCqB,GAEkB,aAApBpB,EAAWkB,MACV,gBAACW,EAAA,EAAY,CACXC,QAAkB,aAATZ,EAAsB,eAAyB,gBACxDnB,UAAS,uCAAkC,kBAC3CgC,QA1DR,WAEIZ,EADW,aAATD,EACM,OAEA,WACZ,IA0DF,CAOM,SAAUc,EAAqCrC,GACnD,IACEC,EAUED,EAVFC,MACAG,EASEJ,EATFI,UACAkC,EAQEtC,EARFsC,qBACAC,EAOEvC,EAPFuC,iBACAC,EAMExC,EANFwC,YACAC,EAKEzC,EALFyC,qBACAC,EAIE1C,EAJF0C,SACAC,EAGE3C,EAHF2C,SACAC,EAEE5C,EAFF4C,kBACGvC,EAAU,EACXL,EAXE,gJAaN,GAA4B,UAApB6C,EAAM,EAANA,OAAQC,EAAO,EAAPA,QAIVC,EAAmB,WAAO,EAEhC,GAAwB,aAApB1C,EAAWkB,KAAqB,CAClC,IAAMyB,EAASpB,EAAA,OAAkB5B,EAAO,CAAE,WAAY,yBAKtD,OAHIA,EAAMiC,WACRe,EAAOC,SAAWF,GAEb,gBAAChD,EAAY,iBAAKiD,GAC1B,CAED,IAAME,EAAoB,OAAH,wBAClB7C,GAAU,CACbD,UAAW+C,EAAA,gCACTN,EACAC,EACAzC,EAAW+C,KACXT,EACAvC,EACoB,iBAAbJ,EAAMqD,GAAkBrD,EAAMqD,GAAK,QAO9C,OAHIrD,EAAMiC,WACRiB,EAAkBD,SAAWF,GAG7B,gBAACzC,EAAA,QAAU,CAACF,UAAU,gBACjBH,GACD,gBAACK,EAAA,QAAU,CAACE,QAASH,EAAWI,GAAIL,UAAU,6BAC3CH,EACAsC,GAAoB,wBAAMnC,UAAU,eAAa,KACjDoC,GACC,gBAACN,EAAA,EAAY,CACX9B,UAAS,uCAAkC,eAC3C+B,QAAS,UACTmB,MAAOd,EACPe,iBAAkBd,EAClBe,iBAAe,IAGlBZ,GAAqB,wBAAMxC,UAAU,kBAAgB,IAAO,gBAACqD,EAAA,EAAI,CAACrC,UAAWA,EAAWsC,OAAO,gBAE7FpB,KAA2BjC,EAAiDsD,WAC7E,uBAAKvD,UAAU,WACb,gBAACU,EAAgB,CACfG,UAAYZ,EAAW+C,KACvBjC,MAAQd,EAAiDsD,cAOnE,gBAACpD,EAAY,iBAAK2C,MAEfR,GACD,gBAACpC,EAAA,OAAS,CAACF,UAAU,kBAClBsC,GAIL,gBAAC,KAAY,CAACU,KAAM/C,EAAW+C,OAC5B,SAACQ,GAAoB,OAAK,gBAACtD,EAAA,mBAAqB,CAACiB,KAAK,WAAWqC,EAAqC,IAI/G,CAtKArD,EAAasD,aAAe,CAC1BC,aAAc,OA2EhBzB,EAAUwB,aAAe,CACvBC,aAAc,MACdrB,qBAAsB,0hBCrElB,SAAUsB,EAId/D,GACA,IAAQgE,EAAmFhE,EAAnFgE,kBAAmBC,EAAgEjE,EAAhEiE,mBAAoBC,EAA4ClE,EAA5CkE,cAAeC,EAA6BnE,EAA7BmE,SAAaC,EAAW,EAAKpE,EAArF,uEAMAqE,EAAqCL,GAAqBhE,EAAMsE,iBAClEtE,EAAMsE,iBAAiBC,KA3D7B,SAA4DL,GAC1D,IAAKA,EACH,MAAO,CAAC,EAEV,IAAMlD,EAAS,cAAuBkD,GAetC,OAbA,SAASM,EAAgBC,GACvBC,OAAOC,KAAK3D,GAAQ4D,SAAQ,SAACC,GACtB7D,EAAO8D,eAAeD,KAGvB,aAAsBJ,EAAMI,IAC9BL,EAAgBC,EAAMI,IACC,OAAhB7D,EAAO6D,WACP7D,EAAO6D,GAClB,GACF,CAEAL,CAAgBxD,GACTA,CACT,CAuCkC+D,CAAsBb,IAClDA,EA4BEc,EAA+B,CACnCC,mBAAoBjF,EAAMiF,oBAG5B,OACE,gBAAC,KAAM,eACLC,oBAAkB,GACbd,EAA6D,CAClEF,cAAeG,EACfF,SAnCoB,SACtBnD,EAAkB,GAEhB,IADAmE,EAAa,EAAbA,cAAeC,EAAS,EAATA,UAAWC,EAAa,EAAbA,cAOtBC,EAAgBrB,GAAsBjE,EAAMsE,iBAC9CtE,EAAMsE,iBAAiBC,KAAKvD,GAC5BA,EAEJmD,EAASmB,GAAe,WAAoD,QAAnDC,EAAA,uDAA6C,CAAC,EAGrE,GAFAA,EAAQC,OAASJ,IAEbG,EAAQ1C,OACV,IAAK,IAAL,MAA6B6B,OAAOe,QAAQF,EAAQ1C,QAAO,eAAE,CAAxD,o6BAAQgC,EAAG,KAAEa,EAAK,KACrBL,EAAcR,EAAKa,EACpB,CAGHP,GAAc,EAChB,GACF,EAYIH,cAAeA,IAEd,eAA0BhF,EAAMqB,UAC7B,SAACM,GAA0B,OAAM3B,EAAMqB,SAA6DM,EAAE,EACtG,iBAAqB3B,EAAMqB,UAAYrB,EAAMqB,SAAW,KAIlE,CAEM,SAAUsE,IACd,OAAO,SACT,CApEA5B,EAAYF,aAAe,CACzBG,mBAAmB,EACnBC,oBAAoB,0EChDhB,SAAU2B,IAAiD,2BAAzBC,EAAyB,yBAAzBA,EAAyB,gBAC/D,aAAgB,WACTA,EAAY3E,QAGI2E,EAAYC,KAAK,2BAKtC,aAAuB,IAAI,IAC7B,GAAGD,EACL,mDCKa1C,EAAa,CACxB4C,8BAA6B,SAC3BlD,EACAC,EACAkD,EACAjE,EACAkE,EACA1E,GAEA,IAAInB,EAAY,GAWhB,OATAA,EA/BJ,SAAqBmB,EAAcQ,GACjC,IAAI3B,EAAY,GAgBhB,OAZIA,EADG,WADCmB,EAEQ,cAGA,eAGH,OAATQ,IACF3B,GAAa,IAAJ,OAAQA,EAAS,QAEf,OAAT2B,IACF3B,GAAa,IAAJ,OAAQA,EAAS,QAErBA,CACT,CAagB8F,CAAY3E,EAAMQ,IAG1B,QAAMe,EAASkD,KAAc,QAAMnD,EAAQmD,KAC7C5F,GAAa,eAEX6F,IACF7F,GAAa,IAAJ,OAAQ6F,IAEZ7F,CACT,yGC7BW+F,EAAmB,CAC9BC,OAAM,SAAC3F,EAAY4F,EAAiBC,GAClC,IAAQC,EAAmD,qBAAjCC,EAAiC,oBAAhBC,EAAgB,gBAErDC,EAAa,UAAH,OAAaH,EAAgB,8BAAsB,wBAA8B,KAC3FI,EAAY,SAAH,OAAYH,EAAe,oBAAY,cAAwB,KACxEI,EAAmB,gBAAH,OAAmBH,EAAW,qBAAa,cAAwB,YAAI,UAAoB,MAE3GI,EAAQ,IACVP,aAAU,EAAVA,EAAYpF,SACVoF,EAAWQ,SAAS,UACtBD,EAAME,KAAKL,GACTJ,EAAWQ,SAAS,SACtBD,EAAME,KAAKJ,GACTL,EAAWQ,SAAS,gBACtBD,EAAME,KAAKH,IAEbC,EAAME,KAAKL,EAAYC,EAAWC,GAGpC,IAAMI,EAAqB,CACzBH,MAAO,IAAF,OAAMA,EAAMI,KAAK,KAAI,4BAC1BC,uBAAwB,mBAM1B,OAHIb,IACFW,EAAOX,OAASA,GAEX,CACLc,IAAK,eAAqB,wBAAD,OAAyB1G,EAAE,YAAYuG,GAChEnC,IAAK,aAAF,OAAepE,EAAE,YAAI4F,GAAM,OAAGC,EAAa,IAAH,OAAOc,MAAMC,QAAQf,GAAcA,EAAWW,KAAK,KAAOX,GAAe,IAExH,EAEAgB,wBAAuB,WACrB,MAAO,CAELH,IAAK,eAAqB,8BAA+B,CACvD5F,KAAM,CAAC,aACPgG,iBAAkB,IAEpB1C,IAAK,oBACL2C,WAAW,EAEf,EAEAC,uBAAsB,WACpB,MAAO,CAELN,IAAK,eAAqB,8BAA+B,CACvD5F,KAAM,CAAC,YACPgG,iBAAkB,IAEpB1C,IAAK,mBACL2C,WAAW,EAEf,EAEAE,UAAS,SAACC,GAER,IAAIR,EAAM,8BAAH,OAAiCQ,EAAKC,aAAY,eAKzD,OAHID,EAAKE,mBACPV,EAAM,eAAqBA,EAAK,CAAEU,iBAAkBF,EAAKE,oBAEpD,CACLV,IAAAA,EACAtC,IAAK,aACLtD,KAAM,SACNoG,KAAM,CAAEvE,KAAMuE,EAAKvE,MACnB0E,iBAAkB,CAAE,YAAa,UAErC,EAEAC,aAAY,SAACtH,GACX,MAAO,CACL0G,IAAK,wBAAF,OAA0B1G,GAC7BoE,IAAK,gBACLtD,KAAM,WACNuG,iBAAkB,CAAE,YAAa,UAErC,EAEAE,WAAU,SAACL,GACT,MAAO,CAELR,IAAK,8BACLtC,IAAK,cACLtD,KAAM,SACNoG,KAAM,CACJM,UAAW,MACXC,gBAAiBP,EAAKQ,YACtBC,gBAAiBT,EAAKU,YACtBC,UAAW,CAACX,EAAKY,eAEnBT,iBAAkB,CAAE,YAAa,UAErC,EAEAU,aAAY,SAAC/H,EAAY2C,GACvB,MAAO,CACL+D,IAAK,wBAAF,OAA0B1G,GAC7BoE,IAAK,gBACLtD,KAAM,QACNoG,KAAM,CAAEvE,KAAAA,GACR0E,iBAAkB,CAAE,YAAa,UAErC,EAEAW,aAAY,SAACC,EAAiBC,GAC5B,MAAO,CAELxB,IAAK,0BAAF,OAA4BuB,EAAO,0CAAkCC,EAAS,KACjF9D,IAAK,iBAAF,OAAmB6D,GAE1B,EAEAE,UAAS,SAACC,GACR,IAAMlB,EAAmB,CACvBO,gBAAiBW,EAAQV,YACzBC,gBAAiBS,EAAQR,YACzBC,UAAWO,EAAQH,SAGrB,MAAO,CACLvB,IAAK,8BACLtC,IAAK,eAAF,OAAiB8C,EAAKW,UAAUrB,KAAK,MACxC1F,KAAM,SACNoG,KAAAA,EACAG,iBAAkB,CAAC,SAEvB,EAEAgB,cAAa,SAACnB,GACZ,MAAO,CACLR,IAAK,wCACLtC,IAAK,kBACLtD,KAAM,SACNoG,KAAAA,EAEJ,kOClJIoB,EAAYC,EAAA,mBADA,yBAGLC,EAA+B,OAAaC,MAAM,CAC7D9F,KAAM,OAEH+F,UAAS,kBAAMJ,EAAU,eAAe,IACxCK,IAAI,KAAK,kBAAML,EAAU,gBAAgB,MAYxC,SAAUM,EAAerJ,GAC7B,IAAMoE,GAAc,UAEpB,OACE,gBAAC,KAAI,KACH,gBAAC/B,EAAA,EAAS,CACRpC,MAAO8I,EAAU,QACjBxH,KAAK,OACL6B,KAAK,OACL3C,GAAG,OACH6I,YAAaP,EAAU,eACvBQ,WAAS,EACT7D,MAAOtB,EAAYpD,OAAOoC,KAC1B+F,UAAQ,IAEV,gBAACK,EAAA,EAAY,KACX,gBAACA,EAAA,SAAmB,CAACpH,QAASpC,EAAMyJ,gBACpC,gBAACD,EAAA,SAAmB,CAACE,QAAQ,OAAOC,YAAa3J,EAAM2J,YAAaC,KAAMb,EAAU,mBAI5F,y9NC7BM,EAAYC,EAAA,mBADA,yBAOZ,SAAUa,EAAiB7J,GAC/B,QAA6D,KAArB,YAAe,KAAM,o5BAArD2J,EAAW,KAAEG,EAAc,KAE7BC,EAAa,uBACbC,GAAS,SAETC,EAAS,kBAA6BC,EAAA,SAAuBlK,EAAMS,MAEzE,OAAqBwJ,EAAOE,YA0B5B,IAAMC,EACJH,EAAOI,aAGT,OACE,gBAACC,EAAA,EAAK,CACJhH,MAAO,EAAU,SACjBiH,WAAYvK,EAAMuK,WAClBjJ,oBAAqB8I,GAEpBA,GACC,gBAACrG,EAAA,EAAW,CACVG,cAAe,CAAEd,KAAM6G,EAAOtC,KAAKvE,MACnCkB,iBAAkB2E,EAClB9E,SAtCR,SAAwBwD,uHAIpB,OAHFmC,GAAe,GAAM,kBAGbC,EAAW5D,EAAA,eAA8B8D,EAAOtC,KAAKlH,GAAIkH,EAAKvE,OAAM,OAC1E4G,EAAOQ,QAAQ,EAAU,YACzBxK,EAAMuK,aAENE,EAAA,gBAA8B,CAC5BhK,GAAIwJ,EAAOtC,KAAKlH,GAChB2C,KAAMuE,EAAKvE,KACXsH,QAAST,EAAOtC,KAAKvE,MACpB,CACDuH,OAAQ,YACRC,WAAY,YACZC,cAAe,cACfC,SAAU,aACT,gDAEHd,EAAOQ,QAAQ,EAAU,UACzBxK,EAAMuK,aAAa,wDAEtB,EAiBOQ,iBAAe,GAEf,gBAAC1B,EAAc,CACbI,cAAezJ,EAAMuK,WACrBZ,YAAaA,KAMzB","sources":["file:///app/packages/libs/shared/src/components/forms/form-checkbox/FormCheckbox.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/CharacterCounter.tsx","file:///app/packages/libs/shared/src/components/forms/form-field/form-field.scss","file:///app/packages/libs/shared/src/components/forms/form-field/FormField.tsx","file:///app/packages/libs/shared/src/components/forms/form-wrapper/FormWrapper.tsx","file:///app/packages/libs/shared/src/hooks/UseHandleDialogError.ts","file:///app/packages/libs/shared/src/utils/FormHelper.ts","file:///app/packages/projects/lite/src/apps/my-videos/flight-requests/MyVideosRequests.ts","file:///app/packages/projects/lite/src/apps/my-videos/views/rename-folder/RenameFolderForm.tsx","file:///app/packages/projects/lite/src/apps/my-videos/views/rename-folder/RenameFolderView.tsx"],"sourcesContent":["import * as React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { FieldAttributes } from 'formik';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\n\nimport { FieldWrapper, FormFieldProps } from '../form-field/FormField';\n\n/**\n * Use this checkbox within Formik contexts\n */\nexport function FormCheckbox(props: FieldAttributes<FormFieldProps>): JSX.Element {\n const { label, checkboxLabelClassName, checkboxLabelFontWeight, className, ...fieldProps } = props;\n\n return (\n <Form.Group className='form-group'>\n <div className={`form-check ${className || ''}`}>\n <FieldWrapper className='form-check-input' {...fieldProps} />\n <Form.Label\n className={`form-check-label cursor-pointer ${checkboxLabelFontWeight === 'normal' ? 'fw-normal' : ''} \n ${checkboxLabelClassName}`}\n htmlFor={fieldProps.id}\n >\n {label}\n </Form.Label>\n {props.checkboxAppLink && props.checkboxAppLinkText && (\n <>\n <span>&nbsp;</span>\n <AppLink appLink={props.checkboxAppLink} className='info-link'>\n {props.checkboxAppLinkText}\n </AppLink>\n </>\n )}\n </div>\n </Form.Group>\n );\n}\n\n","import * as React from 'react';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\ninterface CharacterCounterProps<Values extends HashObject> {\n fieldName: keyof Values;\n limit: number;\n}\n\nexport function CharacterCounter<Values extends HashObject>(props: CharacterCounterProps<Values>): JSX.Element {\n const { values } = useFormikContext<Values>();\n\n const field = values[props.fieldName];\n\n if (typeof field !== 'string')\n return <></>;\n\n return (\n <div className='float-end text-secondary fw-normal'>\n {field.length}/{props.limit} characters\n </div>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"revealPassword\":\"jCfI0\",\"passwordInput\":\"RBJnf\",\"passwordContainer\":\"d78lK\",\"passwordContainerDisabled\":\"asbVo\",\"infoTooltip\":\"wzyOG\",\"spinner\":\"CycFx\"};","import * as React from 'react';\nimport { Form, Spinner } from 'react-bootstrap';\nimport { Placement } from 'react-bootstrap/esm/types';\nimport { ErrorMessage, Field, FieldAttributes, FieldProps, useFormikContext } from 'formik';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\nimport { FormCheckbox } from 'libs/shared/components/forms/form-checkbox/FormCheckbox';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FormHelper } from 'libs/shared/utils/FormHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { CharacterCounter } from './CharacterCounter';\n\nimport styles from './form-field.scss';\n\nconst namespace = 'shared.formField';\n\nexport type FormSize = 'lg' | 'sm';\n\n// If checkboxLabelFontWeight is not specified, it will be bold by default\nexport type CheckboxLabelFontWeight = 'normal' | 'bold'\n\nexport interface FormFieldProps {\n /**\n * The name prop MUST be the same as the attribute\n * name of the value that the field is bound to.\n */\n name: string;\n label?: string;\n children?: any;\n showCharacterCounter?: boolean;\n showRequiredStar?: boolean;\n checkboxAppLink?: Core.AppLink;\n checkboxAppLinkText?: string;\n checkboxLabelClassName?: string;\n checkboxLabelFontWeight?: CheckboxLabelFontWeight\n infoTooltip?: string;\n infoTooltipPlacement?: Placement;\n infoText?: string;\n formSize?: FormSize;\n showOptionalLabel?: boolean;\n showLoadingSpinner?: boolean;\n}\n\nFieldWrapper.defaultProps = {\n autoComplete: 'off'\n};\n\nexport function FieldWrapper(\n props: FieldAttributes<FormFieldProps> & { className: string }\n): React.ReactElement {\n const { children, showLoadingSpinner, ...fieldProps } = props;\n\n const [ type, setType ] = React.useState(props.type);\n\n function onClickTogglePassword(): void {\n if (type === 'password')\n setType('text');\n else\n setType('password');\n }\n\n const resolvedChildren = FunctionHelper.isFunction(children)\n ? (f: FieldProps) => children(f)\n : React.Children.count(children) ? children : null;\n\n if (fieldProps.type !== 'password') {\n if (showLoadingSpinner) {\n return (\n <div className='position-relative'>\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n\n <div className={styles.spinner}>\n <Spinner animation='border' size='sm' />\n </div>\n </div>\n );\n }\n\n return (\n <Field {...(ObjectHelper.omit(fieldProps, ['formSize']))}>\n {resolvedChildren}\n </Field>\n );\n }\n\n let containerClassName = `position-relative ${styles.passwordContainer}`;\n\n if (fieldProps.className)\n containerClassName += ` ${fieldProps.className}`;\n\n if (fieldProps.disabled)\n containerClassName += ` ${styles.passwordContainerDisabled}`;\n\n /**\n * We need to wrap out input with a relatively positioned element in order to absolutely\n * position our visibility icon to reveal the password - Sha\n */\n return (\n <div className={containerClassName}>\n <Field\n {...(ObjectHelper.omit(fieldProps, [ 'formSize', 'type', 'className' ]))}\n type={type}\n className={`${styles.passwordInput} border-0 w-100 h-100 outline-none rounded`}\n >\n {resolvedChildren}\n </Field>\n {fieldProps.type === 'password' &&\n <SvgContainer\n svgName={type === 'password' ? cvSvgLibrary.VisibleOn : cvSvgLibrary.VisibleOff}\n className={`svg-container cursor-pointer ${styles.revealPassword}`}\n onClick={onClickTogglePassword}\n />\n }\n </div>\n );\n}\n\nFormField.defaultProps = {\n autoComplete: 'off',\n infoTooltipPlacement: 'top'\n};\n\nexport function FormField<Values extends HashObject>(props: FieldAttributes<FormFieldProps>): React.ReactElement {\n const {\n label,\n className,\n showCharacterCounter,\n showRequiredStar,\n infoTooltip,\n infoTooltipPlacement,\n infoText,\n formSize,\n showOptionalLabel,\n ...fieldProps\n } = props;\n\n const { errors, touched } = useFormikContext<Values>();\n\n // This function overwrites the default `onChange` function whenever `props.disabled` is set.\n // This prevents users from \"undisabling\" form fields via inspect element, then editing the field.\n const disabledOnChange = () => {};\n\n if (fieldProps.type === 'checkbox') {\n const _props = ObjectHelper.omit(props, [ 'formSize', 'infoTooltipPlacement' ]);\n\n if (props.disabled)\n _props.onChange = disabledOnChange;\n\n return <FormCheckbox {..._props} />;\n }\n\n const fieldWrapperProps = {\n ...fieldProps,\n className: FormHelper.getCustomFormControlClassName(\n errors,\n touched,\n fieldProps.name,\n formSize,\n className,\n typeof props.as === 'string' ? props.as : null\n )\n };\n\n if (props.disabled)\n fieldWrapperProps.onChange = disabledOnChange;\n\n return (\n <Form.Group className='form-group'>\n {!!label && (\n <Form.Label htmlFor={fieldProps.id} className='d-flex align-items-center'>\n {label}\n {showRequiredStar && <span className='text-danger'>*</span>}\n {infoTooltip && (\n <SvgContainer\n className={`svg-container text-secondary ${styles.infoTooltip}`}\n svgName={cvSvgLibrary.Info}\n title={infoTooltip}\n tooltipPlacement={infoTooltipPlacement}\n tooltipSpanHack\n />\n )}\n {showOptionalLabel && <span className='text-secondary'>&nbsp;<Text namespace={namespace} phrase='optional' /></span>}\n \n {!!showCharacterCounter && !!(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength &&\n <div className='ms-auto'>\n <CharacterCounter\n fieldName={(fieldProps.name as keyof Values)}\n limit={(fieldProps as React.HTMLProps<HTMLInputElement>).maxLength}\n />\n </div>\n }\n </Form.Label>\n )}\n\n <FieldWrapper {...fieldWrapperProps} />\n\n {!!infoText &&\n <Form.Text className='text-secondary'>\n {infoText}\n </Form.Text>\n }\n\n <ErrorMessage name={fieldProps.name}>\n {(errorMessage: string) => <Form.Control.Feedback type='invalid'>{errorMessage}</Form.Control.Feedback>}\n </ErrorMessage>\n </Form.Group>\n );\n}","import * as React from 'react';\nimport { Formik, FormikConfig, FormikContextType, FormikErrors, FormikHelpers, FormikProps, FormikValues, useFormikContext } from 'formik';\n\nimport { FunctionHelper } from 'libs/common/backbone/utils/FunctionHelper';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { ObjectHelper } from 'libs/common/react/utils/ObjectHelper';\n\n/**\n * Note: This currently doesn't support arrays, but the need for arrays as initial\n * form data has not yet come up\n */\nfunction omitNullInitialValues<Values extends FormikValues>(initialValues: Values): Values {\n if (!initialValues)\n return {} as Values;\n\n const values = ObjectHelper.deepClone(initialValues);\n\n function omitChildValues(child: Values): void {\n Object.keys(values).forEach((key: keyof Values) => {\n if (!values.hasOwnProperty(key))\n return;\n \n if (ObjectHelper.isObject(child[key]))\n omitChildValues(child[key]);\n else if (values[key] === null)\n delete values[key];\n });\n }\n\n omitChildValues(values);\n return values;\n}\n\n// Omit attributes from FormikConfig that are defined in FormWrapperProps.\ntype ModifiedFormikConfig<Values extends FormikValues> = Omit<FormikConfig<Values>, 'initialValues' | 'onSubmit'>;\n\ninterface InitialStatus {\n allowInitialSubmit: boolean;\n}\n\nexport type FormSubmissionOptions<FormValues = FormikValues> = {\n reset?: boolean;\n errors?: FormikErrors<FormValues>;\n};\n\ninterface FormWrapperProps<FormValues extends FormikValues, ApiValues extends FormikValues> {\n initialValues: Partial<FormValues | ApiValues>;\n onSubmit: (data: FormValues, onDone: (options?: FormSubmissionOptions<FormValues>) => void) => void;\n castInitialValues?: boolean; // cast to validationSchema\n castValuesOnSubmit?: boolean; // cast to validationSchema\n allowInitialSubmit?: boolean; // if true, useCanSubmitForm will allow submit without any user changes.\n}\n\nFormWrapper.defaultProps = {\n castInitialValues: true,\n castValuesOnSubmit: true\n};\n\nexport function FormWrapper<\n FormValues extends FormikValues = FormikValues,\n ApiValues extends FormikValues = FormValues,\n ExtraProps = HashObject\n>(props: ModifiedFormikConfig<FormValues> & ExtraProps & FormWrapperProps<FormValues, ApiValues>): JSX.Element {\n const { castInitialValues, castValuesOnSubmit, initialValues, onSubmit, ...formikProps } = props;\n\n /**\n * If castInitialValues is true, cast initialValues to the validationSchema.\n * This will ensure that any data fetched from the api conforms to the expected form data shape.\n */\n const formattedInitialValues: FormValues = castInitialValues && props.validationSchema\n ? props.validationSchema.cast(omitNullInitialValues(initialValues))\n : initialValues;\n\n const onSubmitHandler = (\n values: FormValues,\n { setSubmitting, resetForm, setFieldError }: FormikHelpers<FormValues>\n ) => {\n /**\n * validationSchema.cast will coerce the values to the types defined in validationSchema.\n * This is useful for trimming inputs:\n * e.g. if a value field has type Yup.string().trim(), it will be automatically trimmed.\n */\n const formattedData = castValuesOnSubmit && props.validationSchema\n ? props.validationSchema.cast(values)\n : values;\n\n onSubmit(formattedData, (options: FormSubmissionOptions<FormValues> = {}) => {\n options.reset && resetForm();\n\n if (options.errors) {\n for (const [ key, value ] of Object.entries(options.errors)) {\n setFieldError(key, value);\n }\n }\n\n setSubmitting(false);\n });\n };\n\n const initialStatus: InitialStatus = {\n allowInitialSubmit: props.allowInitialSubmit\n };\n\n return (\n <Formik<FormValues, ExtraProps>\n enableReinitialize\n {...(formikProps as ModifiedFormikConfig<FormValues> & ExtraProps)}\n initialValues={formattedInitialValues}\n onSubmit={onSubmitHandler}\n initialStatus={initialStatus}\n >\n {FunctionHelper.isFunction(props.children)\n ? (f: FormikProps<FormValues>) => (props.children as (f: FormikProps<FormValues>) => React.ReactNode)(f)\n : React.Children.count(props.children) ? props.children : null\n }\n </Formik>\n );\n}\n\nexport function useFormikContextWrapper<T>(): FormikContextType<T> {\n return useFormikContext<T>();\n}","import React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\n\nimport { UnspecifiedDialogError } from 'libs/shared/errors/general/unspecified-dialog/UnspecifiedDialogError';\n\nexport function useHandleDialogError(...statusCodes: HttpStatus[]): void {\n React.useEffect(() => {\n if (!statusCodes.length)\n return;\n\n const hasErrorCode = statusCodes.some(Core.ErrorHelper.isStatusCodeError);\n\n if (!hasErrorCode)\n return;\n\n Core.ErrorHelper.throw(new UnspecifiedDialogError());\n }, statusCodes);\n}","import { FormikErrors, FormikTouched, getIn } from 'formik';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\n\nfunction getTypeSize(type: string, size: FormSize) {\n let className = '';\n\n switch (type) {\n case 'select':\n className = 'form-select';\n break;\n default:\n className = 'form-control';\n }\n\n if (size === 'sm')\n className += ` ${className}-sm`;\n\n if (size === 'lg')\n className += ` ${className}-lg`;\n\n return className;\n}\n\nexport const FormHelper = {\n getCustomFormControlClassName<T>(\n errors: FormikErrors<T>,\n touched: FormikTouched<T>,\n attribute: string,\n size?: FormSize,\n additionalClassName?: string,\n type?: string\n ): string {\n let className = '';\n\n className = getTypeSize(type, size);\n\n // Using getIn as it supports dot notation\n if (getIn(touched, attribute) && getIn(errors, attribute))\n className += ' is-invalid';\n\n if (additionalClassName)\n className += ` ${additionalClassName}`;\n\n return className;\n }\n};","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { SearchIndices } from 'libs/shared/apps/search/interfaces';\nimport { SharedWithStatements } from 'libs/shared/constants/WithStatements';\nimport { CurationStatus } from 'libs/shared/enums/CurationStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\n\nimport { AddFolderRequest } from 'apps/my-videos/interfaces/requests/AddFolderRequest';\nimport { AddToExchangeRequest } from 'apps/my-videos/interfaces/requests/AddToExchangeRequest';\nimport { MoveFolderRequest } from 'apps/my-videos/interfaces/requests/MoveFolderRequest';\nimport { MoveVideoRequest } from 'apps/my-videos/interfaces/requests/MoveVideoRequest';\n\nexport const MyVideosRequests = {\n videos(id: string, cursor?: string, typeFilter?: SearchIndices | SearchIndices[]): Flight.Request {\n const { VIDEO_COLLECTION, CLIP_COLLECTION, INTERACTIVE } = SharedWithStatements;\n\n const videoQuery = `videos[${VIDEO_COLLECTION}]{libraries.typeid:${MasterType.WorkspaceCollection}}`;\n const clipQuery = `clips[${CLIP_COLLECTION}]{status:${CurationStatus.Published}}`;\n const interactiveQuery = `interactives[${INTERACTIVE}]{status:[${CurationStatus.Published},${CurationStatus.Draft}]}`;\n\n const query = [];\n if (typeFilter?.length) {\n if (typeFilter.includes('video'))\n query.push(videoQuery);\n if (typeFilter.includes('clip'))\n query.push(clipQuery);\n if (typeFilter.includes('interactive'))\n query.push(interactiveQuery);\n } else {\n query.push(videoQuery, clipQuery, interactiveQuery);\n }\n\n const params: HashObject = {\n query: `(${query.join('|')}){orderbydesc:timestamp}`,\n permissionFilterOption: PermissionFilterOption.StripMetadata\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/objects/${id}/members`, params),\n key: `my:videos:${id}:${cursor}${typeFilter ? `:${Array.isArray(typeFilter) ? typeFilter.join(':') : typeFilter}` : ''}`\n };\n },\n\n workspaceWithCategories(): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['workspace'],\n maxCategoryDepth: 6\n }),\n key: 'workspace:folders',\n normalize: false\n };\n },\n\n exchangeWithCategories(): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: UrlHelper.urlBuilder('/api/domain/v2/me/libraries', {\n type: ['exchange'],\n maxCategoryDepth: 5\n }),\n key: 'exchange:folders',\n normalize: false\n };\n },\n\n addFolder(data: AddFolderRequest): Flight.Request {\n // TODO: Need to stop using domain\n let url = `/api/domain/v2/collections/${data.collectionId}/categories`;\n\n if (data.parentCategoryId)\n url = UrlHelper.urlBuilder(url, { parentCategoryId: data.parentCategoryId });\n\n return {\n url,\n key: 'add:folder',\n type: HttpVerbs.POST,\n data: { name: data.name },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n deleteFolder(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'delete:folder',\n type: HttpVerbs.DELETE,\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n moveFolder(data: MoveFolderRequest): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: '/api/domain/v2/objects/move',\n key: 'move:folder',\n type: HttpVerbs.POST,\n data: {\n assocType: 'has',\n newCollectionId: data.newFolderId,\n oldCollectionId: data.oldFolderId,\n objectIds: [data.moveFolderId]\n },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n updateFolder(id: string, name: string): Flight.Request {\n return {\n url: `{gateway}/v1/objects/${id}`,\n key: 'rename:folder',\n type: HttpVerbs.PUT,\n data: { name },\n invalidationKeys: [ 'workspace', 'folder' ]\n };\n },\n\n videoFolders(videoId: string, libraryId: string): Flight.Request {\n return {\n // TODO: Need to stop using domain\n url: `/api/domain/v2/objects/${videoId}/categories?query=libraries{id:${libraryId}}`,\n key: `video:folders:${videoId}`\n };\n },\n\n moveVideo(request: MoveVideoRequest): Flight.Request {\n const data: HashObject = {\n newCollectionId: request.newFolderId,\n oldCollectionId: request.oldFolderId,\n objectIds: request.videoId\n };\n\n return {\n url: '/api/domain/v3/objects/move',\n key: `move:folder:${data.objectIds.join(',')}`,\n type: HttpVerbs.POST,\n data,\n invalidationKeys: ['video']\n };\n },\n\n addToExchange(data: AddToExchangeRequest): Flight.Request {\n return {\n url: '{gateway}/v1/users/me/videos/exchange',\n key: 'add:to:exchange',\n type: HttpVerbs.POST,\n data\n };\n }\n};","import React from 'react';\nimport { Form, useFormikContext } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\n\nconst namespace = 'myVideos.renameFolder';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const RenameFolderValidationSchema = Yup.object().shape({\n name: Yup\n .string()\n .required(() => getPhrase('nameRequired'))\n .max(255, () => getPhrase('maxNameLength'))\n});\n\nexport interface RenameFolderFormData {\n name: string;\n}\n\ninterface RenameFolderFormProps {\n onClickCancel: () => void;\n showSpinner: boolean;\n}\n\nexport function MoveFolderForm(props: RenameFolderFormProps): JSX.Element {\n const formikProps = useFormikContext<RenameFolderFormData>();\n\n return (\n <Form>\n <FormField\n label={getPhrase('name')}\n type='text'\n name='name'\n id='name'\n placeholder={getPhrase('placeholder')}\n autoFocus\n value={formikProps.values.name}\n required\n />\n <PopupButtons>\n <PopupButtons.Cancel onClick={props.onClickCancel} />\n <PopupButtons.Submit variant='dark' showSpinner={props.showSpinner} text={getPhrase('renameFolder')} />\n </PopupButtons>\n </Form>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup } from 'libs/shared/components/popup/Popup';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useHandleDialogError } from 'libs/shared/hooks/UseHandleDialogError';\nimport { Folder, PopupViewProps } from 'libs/shared/interfaces';\n\nimport { MyVideosRequests } from 'apps/my-videos/flight-requests/MyVideosRequests';\n\nimport { MoveFolderForm, RenameFolderFormData, RenameFolderValidationSchema } from './RenameFolderForm';\n\nconst namespace = 'myVideos.renameFolder';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface RenameFolderViewProps extends PopupViewProps {\n id: string;\n}\n\nexport function RenameFolderView(props: RenameFolderViewProps): JSX.Element {\n const [ showSpinner, setShowSpinner ] = React.useState(false);\n\n const fetchAsync = Flight.useGetFetchAsync();\n const alerts = useAlerts();\n\n const folder = Flight.useBasicFetch<Folder>(LibraryRequests.folder(props.id));\n\n useHandleDialogError(folder.statusCode);\n \n async function onSubmit(data: RenameFolderFormData): Promise<void> {\n setShowSpinner(true);\n\n try {\n await fetchAsync(MyVideosRequests.updateFolder(folder.data.id, data.name));\n alerts.success(getPhrase('success'));\n props.closePopup();\n\n AnalyticsHelper.logUserAction({\n id: folder.data.id,\n name: data.name,\n oldName: folder.data.name\n }, {\n entity: EntityType.Folder,\n actionType: UserAction.Rename,\n workflowPhase: WorkflowPhase.Complete,\n location: LocationContext.Popup\n });\n } catch {\n alerts.success(getPhrase('error'));\n props.closePopup();\n }\n }\n\n const hasLoaded = (\n folder.hasCompleted\n );\n\n return (\n <Popup\n title={getPhrase('title')}\n closePopup={props.closePopup}\n showLoadingSpinner={!hasLoaded}\n >\n {hasLoaded &&\n <FormWrapper<RenameFolderFormData>\n initialValues={{ name: folder.data.name }}\n validationSchema={RenameFolderValidationSchema}\n onSubmit={onSubmit}\n validateOnMount\n >\n <MoveFolderForm\n onClickCancel={props.closePopup}\n showSpinner={showSpinner}\n />\n </FormWrapper>\n }\n </Popup>\n );\n}"],"names":["FormCheckbox","props","label","checkboxLabelClassName","checkboxLabelFontWeight","className","fieldProps","Form","FieldWrapper","htmlFor","id","checkboxAppLink","checkboxAppLinkText","AppLink","appLink","CharacterCounter","field","values","fieldName","length","limit","namespace","children","showLoadingSpinner","type","setType","resolvedChildren","FunctionHelper","f","ObjectHelper","Spinner","animation","size","containerClassName","disabled","SvgContainer","svgName","onClick","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","name","as","title","tooltipPlacement","tooltipSpanHack","Text","phrase","maxLength","errorMessage","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formikProps","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","key","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","options","reset","entries","value","useFormikContextWrapper","useHandleDialogError","statusCodes","some","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","MyVideosRequests","videos","cursor","typeFilter","VIDEO_COLLECTION","CLIP_COLLECTION","INTERACTIVE","videoQuery","clipQuery","interactiveQuery","query","includes","push","params","join","permissionFilterOption","url","Array","isArray","workspaceWithCategories","maxCategoryDepth","normalize","exchangeWithCategories","addFolder","data","collectionId","parentCategoryId","invalidationKeys","deleteFolder","moveFolder","assocType","newCollectionId","newFolderId","oldCollectionId","oldFolderId","objectIds","moveFolderId","updateFolder","videoFolders","videoId","libraryId","moveVideo","request","addToExchange","getPhrase","LanguageService","RenameFolderValidationSchema","shape","required","max","MoveFolderForm","placeholder","autoFocus","PopupButtons","onClickCancel","variant","showSpinner","text","RenameFolderView","setShowSpinner","fetchAsync","alerts","folder","LibraryRequests","statusCode","hasLoaded","hasCompleted","Popup","closePopup","success","AnalyticsHelper","oldName","entity","actionType","workflowPhase","location","validateOnMount"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
1
  "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2182],{53364:(e,t,n)=>{n.d(t,{b:()=>d});var a=n(32735),r=n(72688),i=n(99504),o=n(86664);const c={idpButton:"FDoJA",idpImage:"bjN_j",divider:"FfyN0"};var l=[{name:"ClassLink",logoUrl:"https://img.clickviewapp.com/v2/logos/ZA2ew5",url:"/login?idp=classlink"},{name:"Clever",logoUrl:"https://img.clickviewapp.com/v2/logos/LqlKgd",url:"/login?idp=clever"}],s=[{name:"Google",logoUrl:"https://img.clickviewapp.com/v2/logos/l5x0jL",url:"/login?idp=google"},{name:"Microsoft",logoUrl:"https://img.clickviewapp.com/v2/logos/xAxGPP",url:"/login?idp=microsoft"}];function u(e){var t=e.idp,n=e.last;return a.createElement("button",{className:"btn btn-lg btn-outline-dark w-100 ".concat(n?"":"mb-3"," ").concat(c.idpButton),onClick:function(){if(e.onClick)e.onClick(t);else{var n=window.location.pathname+window.location.search,a=JSON.stringify(function(){var e={},t=r.N.getEncodedAttributionData();t&&(e.r=t);var n=i.F.getUtmParameters();return n&&(e.utms=n),e}());window.location.href=t.url+"&redirectUrl="+encodeURIComponent(n)+"&attribution="+encodeURIComponent(a)}}},t.logoUrl&&a.createElement("img",{src:t.logoUrl,className:c.idpImage}),"Continue with ",t.name)}function d(e){var t,n,r="idps"in e?e.idps:null;return!(null==r?void 0:r.length)&&"geoLocation"in e&&(r=[].concat(s),o.I.isCountryCodeUS(null===(t=e.geoLocation)||void 0===t?void 0:t.countryCode)&&(n=r).unshift.apply(n,l)),a.createElement("div",{className:"".concat(e.className?e.className:"")},a.createElement("div",{className:"my-3 border-bottom position-relative ".concat(c.divider)}),r.map((function(t,n){return a.createElement(u,{idp:t,key:n,onClick:"onClick"in e?e.onClick:null})})))}},19623:(e,t,n)=>{n.d(t,{P:()=>p});var a=n(32735),r=n(81886),i=n(23481),o=n(53364),c=n(36848),l=n(83345),s=n(14070),u=n(97291),d="launchpad.signInButtons",m=i.T.encloseNamespace(d);function p(e){a.useEffect((function(){e.skipPrompt&&r.Q.Ab.PageLoad(r.Q.C$.getHref(t))}),[]);var t=function(){var t=r.Q.Ab.GetQuery(),n={};if(e.customerId&&(n.customerId=e.customerId,delete t.customerId),e.skipPrompt&&delete t.skipPrompt,e.redirectUrl)n.redirectUrl=e.redirectUrl;else{var a=r.Q.Ab.SerializeQueryParams(t);n.redirectUrl=r.Q.Ab.GetCurrentPath()+(a?"?"+a:"")}return e.showSignUp&&(n.showSignUp=!0),{application:u.O.DEFAULT,action:s.e.Default.LOG_IN,params:n}}();return a.createElement(a.Fragment,null,a.createElement(c.F,{className:"btn btn-lg btn-dark w-100 mt-4",appLink:t},a.createElement(l.x,{namespace:d,phrase:e.pageAppLinkString?"signInToWatch":"signIn"})),e.showJoinCode?a.createElement(c.F,{className:"btn btn-link info-link btn-lg w-100 mt-2",appLink:{application:u.O.LAUNCHPAD,action:s.e.Launchpad.JOIN_CLASSROOM_PROMPT}},m("enterCode")):a.createElement(a.Fragment,null,a.createElement(c.F,{className:"btn btn-lg btn-outline-dark w-100 mt-3",appLink:{application:u.O.LAUNCHPAD,action:s.e.SignUp.SIGN_UP,params:{pageAppLinkString:e.pageAppLinkString}}},m("signUp")),a.createElement(o.b,{geoLocation:e.geoLocation})))}},92182:(e,t,n)=>{n.r(t),n.d(t,{ShareLinkSignInView:()=>h});var a=n(32735),r=n(23481),i=n(65858),o=n(64249),c=n(2786),l=n(11882),s=n(4594),u=n(83421),d=n(7179),m=n(19623),p=n(75608),g=n(17762),f=n(408);const v={logo:"Nbzoq",container:"hKyDn"};var b="launchpad.shareLinkSignIn";function h(e){var t=e.shareId,n=e.redirectUrl,h=e.customerId,y=(0,p.a)(t),k=(0,d.P)(function(e,t){return{id:null==t?void 0:t.id,app:(0,d.e)(null==t?void 0:t.typeId),shareId:e}}(t,y),i.LZ.Launchpad),E=k.deepLink,I=k.showDeepLink,C=k.onClickDeepLink,w=(0,f.B)().trialAppLinkString,U=(0,g.M)();return y?a.createElement(u.Z,{title:y.name,imageUrl:o.I.getImageUrl(y),objectType:y.typeId,links:[{text:r.T.getPhrase(b,"openInApp"),url:E,hide:!I,onClick:C}]},a.createElement("div",{className:"".concat(v.container," m-auto")},a.createElement("div",{className:"".concat(v.logo," mb-4 mx-auto")},a.createElement(c.$S,null)),!!y.name&&a.createElement("h1",{className:"h3"},y.typeId===s.E.Video&&a.createElement(l.$,{type:"series",video:y,analyticsOptions:{},size:"sm"}),y.name),"description"in y&&a.createElement("p",{className:"mb-0 clamp-3"},y.description),a.createElement(m.P,{geoLocation:U,customerId:h,redirectUrl:n,skipPrompt:!1,showJoinCode:!1,pageAppLinkString:w,showSignUp:!0}))):a.createElement(a.Fragment,null)}},75608:(e,t,n)=>{n.d(t,{a:()=>p});var a=n(20354),r=n(30439),i=n(4594),o=n(21750),c=n(43012),l=n(20768),s=n(5112),u=n(60011),d=n(31949),m=n(1575);function p(e){var t=a.a.useBasicFetch(d.N.currentUser()),n=a.a.useBasicFetch(r.o.getShareObject(e)),p=function(){if(!n.data||!t.data)return null;switch(n.data.objectTypeId){case i.E.Video:return m.R.publicVideo(n.data.objectId,e);case i.E.Clip:return c.e.publicClip(n.data.objectId,e);case i.E.Interactive:return l.b.publicInteractiveMetadata(n.data.objectId,e);case i.E.Playlist:return s.C.getSharedPlaylist(n.data.objectId,e);case i.E.Subject:return o.x.classification(n.data.objectId,t.data.id);case i.E.Series:return u.J.sharedSeries(n.data.objectId,e)}}();return a.a.useBasicFetch(p).data}},17762:(e,t,n)=>{n.d(t,{M:()=>c});var a=n(39202),r=n(20354),i=n(39151),o={countryCode:"us",isFallback:!0};function c(){var e,t,n=r.a.useBasicFetch(i.L.geoLocation()),c=null===(t=null===(e=a.Ab.GetQuery())||void 0===e?void 0:e.countryCode)||void 0===t?void 0:t.toLowerCase();return c?{countryCode:c}:n.hasCompleted&&!n.data?o:n.data}},408:(e,t,n)=>{n.d(t,{B:()=>o});var a=n(2948),r=n(86702);function i(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}function o(){var e,t,n=(e=(0,a.D)(r.y.OPEN_IN_APP_DATA),t=1,function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,c=[],l=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=i.call(n)).done)&&(c.push(a.value),c.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return i(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?i(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}())[0];return{trialAppLinkString:function(){if(n&&["videos","clips","series","playlists","topics","interactives"].includes(n.app)){var e=n.id;switch(n.app){case"videos":return"video:".concat(e);case"playlists":return"playlist:".concat(e);case"series":return"series:".concat(e);case"topics":return"topic:".concat(e);case"interactives":return"interactive:".concat(e);case"clips":return"clip:".concat(e)}}}()}}},83421:(e,t,n)=>{n.d(t,{Z:()=>p});var a=n(32735),r=n(54610),i=n(4594),o=n(67453),c=n(99742);const l={left:"vIypY",leftTextImage:"YViNj",right:"MkD4u",blur:"X6mCh",imageContainer:"bc7kz",imagePosition:"JOhEj",image:"Ef2QR",thumbnail:"Gdurb",tallposter:"fjVNK",cover:"o3j31",linksContainer:"AT9Dk"};function s(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var n=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=n){var a,r,i,o,c=[],l=!0,s=!1;try{if(i=(n=n.call(e)).next,0===t){if(Object(n)!==n)return;l=!1}else for(;!(l=(a=i.call(n)).done)&&(c.push(a.value),c.length!==t);l=!0);}catch(e){s=!0,r=e}finally{try{if(!l&&null!=n.return&&(o=n.return(),Object(o)!==o))return}finally{if(s)throw r}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return u(e,t);var n=Object.prototype.toString.call(e).slice(8,-1);return"Object"===n&&e.constructor&&(n=e.constructor.name),"Map"===n||"Set"===n?Array.from(e):"Arguments"===n||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)?u(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function u(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,a=new Array(t);n<t;n++)a[n]=e[n];return a}var d=[{bgUrl:c.W.LaunchPad.BG_1},{bgUrl:c.W.LaunchPad.BG_2},{bgUrl:c.W.LaunchPad.BG_3},{bgUrl:c.W.LaunchPad.BG_4},{bgUrl:c.W.LaunchPad.BG_5}];function m(e){switch(e){case i.E.Video:case i.E.Interactive:case i.E.Clip:return l.thumbnail;case i.E.Subject:case i.E.Playlist:return l.cover;case i.E.Series:return l.tallposter;default:return""}}function p(e){var t,n=s(a.useState(!1),2),i=n[0],c=n[1],u=s(a.useState(""),2),p=u[0],g=u[1],f=s(a.useState(""),2),v=f[0],b=f[1],h=o.j.createUrl(e.imageUrl,{size:r.h2.Large}),y=d;return a.useEffect((function(){if(!h&&y&&0!==y.length){var e,t=(e=y)[Math.floor(Math.random()*e.length)];t.bgUrl&&g(t.bgUrl),t.textUrl&&b(t.textUrl)}}),[]),a.useEffect((function(){if(h){var e=new Image;return e.onload=function(){return c(!0)},e.src=h,function(){return e.onload=null}}}),[]),a.createElement("div",{className:"d-flex"},e.leftComponent?e.leftComponent():a.createElement("div",{className:"".concat(l.left," bg-light"),style:{backgroundImage:"url('".concat(p,"')")}},v&&a.createElement("div",{className:l.leftTextImage,style:{backgroundImage:"url('".concat(v,"')")}}),i&&a.createElement(a.Fragment,null,a.createElement("div",{className:l.blur,style:{backgroundImage:"url('".concat(h,"')")}}),a.createElement("div",{className:"".concat(l.imageContainer," ").concat(m(e.objectType))},a.createElement("div",{className:l.imagePosition},a.createElement("img",{className:l.image,src:h,alt:e.title}))))),a.createElement("div",{className:"".concat(l.right," bg-white d-flex flex-column")},a.createElement("div",{className:"position-absolute d-flex align-items-center ".concat(l.linksContainer)},null===(t=e.links)||void 0===t?void 0:t.map((function(e,t){return e.hide?a.createElement(a.Fragment,{key:t}):a.createElement("a",{key:t,href:e.url,className:"info-link fw-semibold",onClick:e.onClick},e.text)}))),e.children))}}}]);
2
- //# sourceMappingURL=2182-5c9db07f5b-lite.chunk.js.map
2
+ //# sourceMappingURL=2182-8e4d603a1b-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/2182-5c9db07f5b-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/sign-up/components/general/global-idps/global-idps.scss","file:///app/packages/libs/shared/src/apps/sign-up/components/general/global-idps/GlobalIdps.tsx","file:///app/packages/projects/lite/src/apps/launchpad/components/sign-in-buttons/SignInButtons.tsx","file:///app/packages/projects/lite/src/apps/launchpad/views/share-link-sign-in/share-link-sign-in.scss","file:///app/packages/projects/lite/src/apps/launchpad/views/share-link-sign-in/ShareLinkSignInView.tsx","file:///app/packages/projects/lite/src/apps/share/hooks/useFetchSharedResource.ts","file:///app/packages/projects/lite/src/apps/sign-up/hooks/useGeoLocation.ts","file:///app/packages/projects/lite/src/apps/sign-up/hooks/useTrialAppLink.tsx","file:///app/packages/projects/lite/src/shared/components/launchpad/launchpad.scss","file:///app/packages/projects/lite/src/shared/components/launchpad/Launchpad.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"idpButton\":\"FDoJA\",\"idpImage\":\"bjN_j\",\"divider\":\"FfyN0\"};","import React from 'react';\n\nimport { HashObject } from 'libs/analytics/interfaces';\nimport { AttributionHelper } from 'libs/analytics/utils/AttributionHelper';\nimport { UtmHelper } from 'libs/analytics/utils/UtmHelper';\n\nimport { LocalityHelper } from 'libs/shared/apps/sign-up/helpers/LocalityHelper';\nimport { IdentityProvider } from 'libs/shared/apps/sign-up/interfaces/IdentityProvider';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nimport styles from './global-idps.scss';\n\nconst US_ONLY_IDPS: IdentityProvider[] = [\n {\n name: 'ClassLink',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/ZA2ew5',\n url: '/login?idp=classlink'\n },\n {\n name: 'Clever',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/LqlKgd',\n url: '/login?idp=clever'\n }\n];\n\nconst GLOBAL_IDPS: IdentityProvider[] = [\n {\n name: 'Google',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/l5x0jL',\n url: '/login?idp=google'\n },\n {\n name: 'Microsoft',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/xAxGPP',\n url: '/login?idp=microsoft'\n }\n];\n\ninterface GlobalIdpButtonProps {\n idp: IdentityProvider;\n /**\n * Because rendering globalIdps is conditional. We have a \"Don't have an account\" link at the bottom\n * which uses margin top. So the last item in this view must not have a margin bottom. - Sha\n */\n last?: boolean;\n onClick?: (idp: IdentityProvider) => void;\n}\n\nfunction getAttributionParams() {\n const params: HashObject = {};\n \n const encodedReferrer = AttributionHelper.getEncodedAttributionData();\n if (encodedReferrer)\n params.r = encodedReferrer;\n\n const utms = UtmHelper.getUtmParameters();\n if (utms)\n params.utms = utms;\n\n return params;\n}\n\nexport function GlobalIdpButton(props: GlobalIdpButtonProps): React.ReactElement {\n const {\n idp,\n last\n } = props;\n\n function onClick(): void {\n if (props.onClick) {\n props.onClick(idp);\n return;\n }\n\n const currentPathAndQuery = window.location.pathname + window.location.search;\n const attributionData = JSON.stringify(getAttributionParams());\n\n /**\n * Intentionally not using LocationUtils as to not bring a large number of dependencies into Auth - Sha\n */\n window.location.href = idp.url\n + '&redirectUrl=' + encodeURIComponent(currentPathAndQuery)\n + '&attribution=' + encodeURIComponent(attributionData);\n }\n\n return (\n <button\n className={`btn btn-lg btn-outline-dark w-100 ${last ? '' : 'mb-3'} ${styles.idpButton}`}\n onClick={onClick}\n >\n {idp.logoUrl && <img src={idp.logoUrl} className={styles.idpImage} />}\n Continue with {idp.name}\n </button>\n );\n}\n\ninterface AuthIdpProps {\n idps: IdentityProvider[];\n onClick: (idp: IdentityProvider) => void;\n className?: string;\n}\n\ninterface LiteIdpProps {\n geoLocation: GeoLocation;\n className?: string;\n}\n\ntype GlobalIdpsProps = AuthIdpProps | LiteIdpProps\n\nexport function GlobalIdps(props: GlobalIdpsProps): JSX.Element {\n let idps = 'idps' in props ? props.idps : null;\n\n if (!idps?.length && 'geoLocation' in props) {\n idps = [...GLOBAL_IDPS];\n\n if (LocalityHelper.isCountryCodeUS(props.geoLocation?.countryCode))\n idps.unshift(...US_ONLY_IDPS);\n }\n\n return (\n <div className={`${props.className ? props.className : ''}`}>\n <div className={`my-3 border-bottom position-relative ${styles.divider}`}></div>\n {idps.map((p, i) => (\n <GlobalIdpButton idp={p} key={i} onClick={'onClick' in props ? props.onClick : null} />\n ))}\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { GlobalIdps } from 'libs/shared/apps/sign-up/components/general/global-idps/GlobalIdps';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'launchpad.signInButtons';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SignInButtonsProps {\n geoLocation: GeoLocation;\n customerId: string;\n skipPrompt: boolean;\n showJoinCode: boolean;\n redirectUrl: string;\n pageAppLinkString: string;\n showSignUp: boolean;\n}\n\nexport function SignInButtons(props: SignInButtonsProps): JSX.Element {\n React.useEffect(() => {\n if (!props.skipPrompt)\n return;\n\n Core.LocationUtils.PageLoad(Core.AppLinkHelper.getHref(appLink));\n }, []);\n\n function getAppLink(): Core.AppLink {\n const currentQuery = Core.LocationUtils.GetQuery();\n const params: HashObject = {};\n\n /**\n * Add customerId to the login url and remove it from the redirect url\n */\n if (props.customerId) {\n params.customerId = props.customerId;\n delete currentQuery.customerId;\n }\n\n /**\n * Remove skip prompt from the return url\n */\n if (props.skipPrompt)\n delete currentQuery.skipPrompt;\n\n if (props.redirectUrl) {\n params.redirectUrl = props.redirectUrl;\n } else {\n const serializedQuery = Core.LocationUtils.SerializeQueryParams(currentQuery);\n params.redirectUrl = Core.LocationUtils.GetCurrentPath() + (serializedQuery ? ('?' + serializedQuery) : '');\n }\n\n if (props.showSignUp)\n params.showSignUp = true;\n\n return {\n application: AppChannels.DEFAULT,\n action: Actions.Default.LOG_IN,\n params\n };\n }\n\n const appLink = getAppLink();\n\n return (\n <>\n <AppLink\n className='btn btn-lg btn-dark w-100 mt-4'\n appLink={appLink}\n >\n <Text namespace={namespace} phrase={props.pageAppLinkString ? 'signInToWatch' : 'signIn'} />\n </AppLink>\n {props.showJoinCode ?\n <AppLink\n className='btn btn-link info-link btn-lg w-100 mt-2'\n appLink={{\n application: AppChannels.LAUNCHPAD,\n action: Actions.Launchpad.JOIN_CLASSROOM_PROMPT\n }}\n >\n {getPhrase('enterCode')}\n </AppLink> :\n <>\n <AppLink\n className='btn btn-lg btn-outline-dark w-100 mt-3'\n appLink={{\n application: AppChannels.LAUNCHPAD,\n action: Actions.SignUp.SIGN_UP,\n params: { pageAppLinkString: props.pageAppLinkString }\n }}\n >\n {getPhrase('signUp')}\n </AppLink>\n <GlobalIdps geoLocation={props.geoLocation} />\n </>\n }\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"Nbzoq\",\"container\":\"hKyDn\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ClickViewLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Video } from 'libs/shared/interfaces';\n\nimport { Launchpad } from 'shared/components/launchpad/Launchpad';\nimport { DeepLinkViewModel, mapMasterTypeToDeepLinkApp, useDeepLinks } from 'shared/hooks/useDeepLinks';\n\nimport { SignInButtons } from 'apps/launchpad/components/sign-in-buttons/SignInButtons';\nimport { useFetchSharedResource } from 'apps/share/hooks/useFetchSharedResource';\nimport { useGeoLocation } from 'apps/sign-up/hooks/useGeoLocation';\nimport { useTrialAppLink } from 'apps/sign-up/hooks/useTrialAppLink';\n\nimport styles from './share-link-sign-in.scss';\n\nconst namespace = 'launchpad.shareLinkSignIn';\n\ninterface ShareLinkSignInProps {\n shareId: string;\n redirectUrl: string;\n customerId?: string;\n}\n\nfunction getInitialDeepLink(shareId: string, sharedResource?: SharableEntity): DeepLinkViewModel {\n return {\n id: sharedResource?.id,\n app: mapMasterTypeToDeepLinkApp(sharedResource?.typeId),\n shareId\n };\n}\n\nexport function ShareLinkSignInView(props: ShareLinkSignInProps): React.ReactElement {\n const { shareId, redirectUrl, customerId } = props;\n const sharedResource = useFetchSharedResource<SharableEntity>(shareId);\n const {\n deepLink,\n showDeepLink,\n onClickDeepLink\n } = useDeepLinks(getInitialDeepLink(shareId, sharedResource), LocationContext.Launchpad);\n const { trialAppLinkString } = useTrialAppLink();\n\n const geoLocation = useGeoLocation();\n\n if (!sharedResource)\n return <></>;\n\n return (\n <Launchpad\n title={sharedResource.name}\n imageUrl={ShareViewHelper.getImageUrl(sharedResource)}\n objectType={sharedResource.typeId}\n links={[{\n text: LanguageService.getPhrase(namespace, 'openInApp'),\n url: deepLink,\n hide: !showDeepLink,\n onClick: onClickDeepLink\n }]}\n >\n <div className={`${styles.container} m-auto`}>\n <div className={`${styles.logo} mb-4 mx-auto`}>\n <ClickViewLogo />\n </div>\n {!!sharedResource.name &&\n <h1 className='h3'>\n {sharedResource.typeId === MasterType.Video &&\n <VideoSubText type='series' video={sharedResource as Video} analyticsOptions={{}} size='sm' />}\n {sharedResource.name}\n </h1>\n }\n {'description' in sharedResource &&\n <p className='mb-0 clamp-3'>{sharedResource.description}</p>\n }\n <SignInButtons\n geoLocation={geoLocation}\n customerId={customerId}\n redirectUrl={redirectUrl}\n skipPrompt={false}\n showJoinCode={false}\n pageAppLinkString={trialAppLinkString}\n showSignUp={true}\n />\n </div>\n </Launchpad>\n );\n}","import { Flight } from 'libs/common/flight';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { CurrentUser, ShareLink } from 'libs/shared/interfaces';\n\nexport function useFetchSharedResource<T>(shareId: string): T {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const shareLink = Flight.useBasicFetch<ShareLink>(ShareRequests.getShareObject(shareId));\n\n function getResourceRequest(): Flight.Request {\n if (!shareLink.data || !currentUser.data)\n return null;\n\n switch (shareLink.data.objectTypeId) {\n case MasterType.Video:\n return VideoRequests.publicVideo(shareLink.data.objectId, shareId);\n case MasterType.Clip:\n return ClipRequests.publicClip(shareLink.data.objectId, shareId);\n case MasterType.Interactive:\n return InteractiveRequests.publicInteractiveMetadata(shareLink.data.objectId, shareId);\n case MasterType.Playlist:\n return PlaylistRequests.getSharedPlaylist(shareLink.data.objectId, shareId);\n case MasterType.Subject:\n return ClassificationRequests.classification(shareLink.data.objectId, currentUser.data.id);\n case MasterType.Series:\n return SeriesRequests.sharedSeries(shareLink.data.objectId, shareId);\n }\n }\n\n const resourceRequest = getResourceRequest();\n const resource = Flight.useBasicFetch<T>(resourceRequest);\n\n return resource.data;\n}","import { LocationUtils } from 'libs/common/backbone/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nconst FALLBACK_COUNTRY: GeoLocation = {\n countryCode: 'us',\n isFallback: true\n};\n\nexport function useGeoLocation(): GeoLocation {\n const geoLocation = Flight.useBasicFetch<GeoLocation>(ConfigRequests.geoLocation());\n\n const countryCode = LocationUtils.GetQuery()?.countryCode?.toLowerCase();\n if (countryCode)\n return { countryCode };\n\n if (geoLocation.hasCompleted && !geoLocation.data)\n return FALLBACK_COUNTRY;\n\n return geoLocation.data;\n}","import { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\nimport { DeepLinkViewModel } from 'shared/hooks/useDeepLinks';\n\nexport function useTrialAppLink() {\n const [viewModel] = useViewModel<DeepLinkViewModel>(ViewModelKeys.OPEN_IN_APP_DATA);\n\n function getTrialAppLinkString() {\n if (!viewModel) {\n return;\n }\n const validApps = [ 'videos', 'clips', 'series', 'playlists', 'topics', 'interactives' ];\n if (!validApps.includes(viewModel.app)) {\n return;\n }\n\n const id = viewModel.id;\n switch (viewModel.app) {\n case 'videos':\n return `video:${id}`;\n case 'playlists':\n return `playlist:${id}`;\n case 'series':\n return `series:${id}`;\n case 'topics':\n return `topic:${id}`;\n case 'interactives':\n return `interactive:${id}`;\n case 'clips':\n return `clip:${id}`;\n }\n }\n\n return {\n trialAppLinkString: getTrialAppLinkString()\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"left\":\"vIypY\",\"leftTextImage\":\"YViNj\",\"right\":\"MkD4u\",\"blur\":\"X6mCh\",\"imageContainer\":\"bc7kz\",\"imagePosition\":\"JOhEj\",\"image\":\"Ef2QR\",\"thumbnail\":\"Gdurb\",\"tallposter\":\"fjVNK\",\"cover\":\"o3j31\",\"linksContainer\":\"AT9Dk\"};","import React from 'react';\n\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport styles from './launchpad.scss';\n\nconst FALLBACK_IMAGES = [\n {\n bgUrl: ImageUrls.LaunchPad.BG_1\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_2\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_3\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_4\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_5\n }\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst XMAS_URLS: LaunchImage[] = [\n {\n bgUrl: '/images/launchpad/xmas/2024-promo1-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo2-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo3-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo4-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo5-bg.png'\n }\n];\n\nfunction mapObjectTypeToImageClass(objectType: MasterType): string {\n switch (objectType) {\n case MasterType.Video:\n case MasterType.Interactive:\n case MasterType.Clip:\n return styles.thumbnail;\n\n case MasterType.Subject:\n case MasterType.Playlist:\n return styles.cover;\n\n case MasterType.Series:\n return styles.tallposter;\n\n default:\n return '';\n }\n}\n\ninterface LaunchpadLink {\n url: string;\n text: string;\n onClick?: () => void;\n hide?: boolean;\n}\n\ninterface LaunchpadProps {\n objectType?: MasterType;\n title?: string;\n imageUrl?: string;\n links?: LaunchpadLink[];\n leftComponent?: () => JSX.Element;\n}\n\ninterface LaunchImage {\n bgUrl: string;\n textUrl?: string;\n}\n\nfunction getRandomImage(urlLists: LaunchImage[]): LaunchImage {\n return urlLists[Math.floor(Math.random() * urlLists.length)];\n}\n\nexport function Launchpad(props: React.PropsWithChildren<LaunchpadProps>): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n const [ image, setImage ] = React.useState<string>('');\n const [ textImage, setTextImage ] = React.useState<string>('');\n\n const imageUrl = ImageHelper.createUrl(props.imageUrl, { size: ImageSize.Large });\n const IMAGE_URLS = FALLBACK_IMAGES;\n\n React.useEffect(() => {\n if (imageUrl || !IMAGE_URLS || IMAGE_URLS.length === 0)\n return;\n\n const image = getRandomImage(IMAGE_URLS);\n\n if (image.bgUrl) {\n setImage(image.bgUrl);\n }\n\n if (image.textUrl) {\n setTextImage(image.textUrl);\n }\n }, []);\n\n React.useEffect(() => {\n if (!imageUrl)\n return;\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = imageUrl;\n return () => img.onload = null;\n }, []);\n\n return (\n <div className='d-flex'>\n { props.leftComponent ?\n props.leftComponent()\n :\n <div className={`${styles.left} bg-light`} style={{ backgroundImage: `url('${image}')` }}>\n { textImage && (\n <div className={styles.leftTextImage} style={{ backgroundImage: `url('${textImage}')` }} />\n )}\n \n {showImage &&\n <>\n <div className={styles.blur} style={{ backgroundImage: `url('${imageUrl}')` }} />\n <div className={`${styles.imageContainer} ${mapObjectTypeToImageClass(props.objectType)}`}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n }\n </div>\n }\n <div className={`${styles.right} bg-white d-flex flex-column`}>\n <div className={`position-absolute d-flex align-items-center ${styles.linksContainer}`}>\n {props.links?.map((link, key) => {\n if (link.hide)\n return <React.Fragment key={key}></React.Fragment>;\n\n return (\n <a key={key} href={link.url} className='info-link fw-semibold' onClick={link.onClick}>\n {link.text}\n </a>\n );\n })}\n </div>\n\n {props.children}\n </div>\n </div>\n );\n}"],"names":["US_ONLY_IDPS","name","logoUrl","url","GLOBAL_IDPS","GlobalIdpButton","props","idp","last","className","onClick","currentPathAndQuery","window","location","pathname","search","attributionData","JSON","stringify","params","encodedReferrer","AttributionHelper","r","utms","UtmHelper","getAttributionParams","href","encodeURIComponent","src","GlobalIdps","idps","length","LocalityHelper","geoLocation","countryCode","unshift","map","p","i","key","namespace","getPhrase","SignInButtons","skipPrompt","appLink","currentQuery","customerId","redirectUrl","serializedQuery","showSignUp","application","action","getAppLink","phrase","pageAppLinkString","showJoinCode","ShareLinkSignInView","shareId","sharedResource","useFetchSharedResource","useDeepLinks","id","app","typeId","getInitialDeepLink","deepLink","showDeepLink","onClickDeepLink","trialAppLinkString","useTrialAppLink","useGeoLocation","Launchpad","title","imageUrl","ShareViewHelper","objectType","links","text","LanguageService","hide","ClickViewLogo","MasterType","VideoSubText","type","video","analyticsOptions","size","description","currentUser","shareLink","resourceRequest","data","objectTypeId","objectId","getResourceRequest","FALLBACK_COUNTRY","isFallback","toLowerCase","hasCompleted","viewModel","includes","getTrialAppLinkString","FALLBACK_IMAGES","bgUrl","ImageUrls","mapObjectTypeToImageClass","showImage","setShowImage","image","setImage","textImage","setTextImage","ImageHelper","IMAGE_URLS","urlLists","Math","floor","random","textUrl","img","Image","onload","leftComponent","style","backgroundImage","alt","link","children"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/2182-8e4d603a1b-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/sign-up/components/general/global-idps/global-idps.scss","file:///app/packages/libs/shared/src/apps/sign-up/components/general/global-idps/GlobalIdps.tsx","file:///app/packages/projects/lite/src/apps/launchpad/components/sign-in-buttons/SignInButtons.tsx","file:///app/packages/projects/lite/src/apps/launchpad/views/share-link-sign-in/share-link-sign-in.scss","file:///app/packages/projects/lite/src/apps/launchpad/views/share-link-sign-in/ShareLinkSignInView.tsx","file:///app/packages/projects/lite/src/apps/share/hooks/useFetchSharedResource.ts","file:///app/packages/projects/lite/src/apps/sign-up/hooks/useGeoLocation.ts","file:///app/packages/projects/lite/src/apps/sign-up/hooks/useTrialAppLink.tsx","file:///app/packages/projects/lite/src/shared/components/launchpad/launchpad.scss","file:///app/packages/projects/lite/src/shared/components/launchpad/Launchpad.tsx"],"sourcesContent":["// extracted by mini-css-extract-plugin\nexport default {\"idpButton\":\"FDoJA\",\"idpImage\":\"bjN_j\",\"divider\":\"FfyN0\"};","import React from 'react';\n\nimport { HashObject } from 'libs/analytics/interfaces';\nimport { AttributionHelper } from 'libs/analytics/utils/AttributionHelper';\nimport { UtmHelper } from 'libs/analytics/utils/UtmHelper';\n\nimport { LocalityHelper } from 'libs/shared/apps/sign-up/helpers/LocalityHelper';\nimport { IdentityProvider } from 'libs/shared/apps/sign-up/interfaces/IdentityProvider';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nimport styles from './global-idps.scss';\n\nconst US_ONLY_IDPS: IdentityProvider[] = [\n {\n name: 'ClassLink',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/ZA2ew5',\n url: '/login?idp=classlink'\n },\n {\n name: 'Clever',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/LqlKgd',\n url: '/login?idp=clever'\n }\n];\n\nconst GLOBAL_IDPS: IdentityProvider[] = [\n {\n name: 'Google',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/l5x0jL',\n url: '/login?idp=google'\n },\n {\n name: 'Microsoft',\n logoUrl: 'https://img.clickviewapp.com/v2/logos/xAxGPP',\n url: '/login?idp=microsoft'\n }\n];\n\ninterface GlobalIdpButtonProps {\n idp: IdentityProvider;\n /**\n * Because rendering globalIdps is conditional. We have a \"Don't have an account\" link at the bottom\n * which uses margin top. So the last item in this view must not have a margin bottom. - Sha\n */\n last?: boolean;\n onClick?: (idp: IdentityProvider) => void;\n}\n\nfunction getAttributionParams() {\n const params: HashObject = {};\n \n const encodedReferrer = AttributionHelper.getEncodedAttributionData();\n if (encodedReferrer)\n params.r = encodedReferrer;\n\n const utms = UtmHelper.getUtmParameters();\n if (utms)\n params.utms = utms;\n\n return params;\n}\n\nexport function GlobalIdpButton(props: GlobalIdpButtonProps): React.ReactElement {\n const {\n idp,\n last\n } = props;\n\n function onClick(): void {\n if (props.onClick) {\n props.onClick(idp);\n return;\n }\n\n const currentPathAndQuery = window.location.pathname + window.location.search;\n const attributionData = JSON.stringify(getAttributionParams());\n\n /**\n * Intentionally not using LocationUtils as to not bring a large number of dependencies into Auth - Sha\n */\n window.location.href = idp.url\n + '&redirectUrl=' + encodeURIComponent(currentPathAndQuery)\n + '&attribution=' + encodeURIComponent(attributionData);\n }\n\n return (\n <button\n className={`btn btn-lg btn-outline-dark w-100 ${last ? '' : 'mb-3'} ${styles.idpButton}`}\n onClick={onClick}\n >\n {idp.logoUrl && <img src={idp.logoUrl} className={styles.idpImage} />}\n Continue with {idp.name}\n </button>\n );\n}\n\ninterface AuthIdpProps {\n idps: IdentityProvider[];\n onClick: (idp: IdentityProvider) => void;\n className?: string;\n}\n\ninterface LiteIdpProps {\n geoLocation: GeoLocation;\n className?: string;\n}\n\ntype GlobalIdpsProps = AuthIdpProps | LiteIdpProps\n\nexport function GlobalIdps(props: GlobalIdpsProps): JSX.Element {\n let idps = 'idps' in props ? props.idps : null;\n\n if (!idps?.length && 'geoLocation' in props) {\n idps = [...GLOBAL_IDPS];\n\n if (LocalityHelper.isCountryCodeUS(props.geoLocation?.countryCode))\n idps.unshift(...US_ONLY_IDPS);\n }\n\n return (\n <div className={`${props.className ? props.className : ''}`}>\n <div className={`my-3 border-bottom position-relative ${styles.divider}`}></div>\n {idps.map((p, i) => (\n <GlobalIdpButton idp={p} key={i} onClick={'onClick' in props ? props.onClick : null} />\n ))}\n </div>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { HashObject } from 'libs/analytics/interfaces';\n\nimport { GlobalIdps } from 'libs/shared/apps/sign-up/components/general/global-idps/GlobalIdps';\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nconst namespace = 'launchpad.signInButtons';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SignInButtonsProps {\n geoLocation: GeoLocation;\n customerId: string;\n skipPrompt: boolean;\n showJoinCode: boolean;\n redirectUrl: string;\n pageAppLinkString: string;\n showSignUp: boolean;\n}\n\nexport function SignInButtons(props: SignInButtonsProps): JSX.Element {\n React.useEffect(() => {\n if (!props.skipPrompt)\n return;\n\n Core.LocationUtils.PageLoad(Core.AppLinkHelper.getHref(appLink));\n }, []);\n\n function getAppLink(): Core.AppLink {\n const currentQuery = Core.LocationUtils.GetQuery();\n const params: HashObject = {};\n\n /**\n * Add customerId to the login url and remove it from the redirect url\n */\n if (props.customerId) {\n params.customerId = props.customerId;\n delete currentQuery.customerId;\n }\n\n /**\n * Remove skip prompt from the return url\n */\n if (props.skipPrompt)\n delete currentQuery.skipPrompt;\n\n if (props.redirectUrl) {\n params.redirectUrl = props.redirectUrl;\n } else {\n const serializedQuery = Core.LocationUtils.SerializeQueryParams(currentQuery);\n params.redirectUrl = Core.LocationUtils.GetCurrentPath() + (serializedQuery ? ('?' + serializedQuery) : '');\n }\n\n if (props.showSignUp)\n params.showSignUp = true;\n\n return {\n application: AppChannels.DEFAULT,\n action: Actions.Default.LOG_IN,\n params\n };\n }\n\n const appLink = getAppLink();\n\n return (\n <>\n <AppLink\n className='btn btn-lg btn-dark w-100 mt-4'\n appLink={appLink}\n >\n <Text namespace={namespace} phrase={props.pageAppLinkString ? 'signInToWatch' : 'signIn'} />\n </AppLink>\n {props.showJoinCode ?\n <AppLink\n className='btn btn-link info-link btn-lg w-100 mt-2'\n appLink={{\n application: AppChannels.LAUNCHPAD,\n action: Actions.Launchpad.JOIN_CLASSROOM_PROMPT\n }}\n >\n {getPhrase('enterCode')}\n </AppLink> :\n <>\n <AppLink\n className='btn btn-lg btn-outline-dark w-100 mt-3'\n appLink={{\n application: AppChannels.LAUNCHPAD,\n action: Actions.SignUp.SIGN_UP,\n params: { pageAppLinkString: props.pageAppLinkString }\n }}\n >\n {getPhrase('signUp')}\n </AppLink>\n <GlobalIdps geoLocation={props.geoLocation} />\n </>\n }\n </>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"logo\":\"Nbzoq\",\"container\":\"hKyDn\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { SharableEntity, ShareViewHelper } from 'libs/shared/apps/share/views/share/ShareViewHelper';\nimport { ClickViewLogo } from 'libs/shared/components/svgs/clickview-logo/ClickViewLogo';\nimport { VideoSubText } from 'libs/shared/components/video-sub-text/VideoSubText';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { Video } from 'libs/shared/interfaces';\n\nimport { Launchpad } from 'shared/components/launchpad/Launchpad';\nimport { DeepLinkViewModel, mapMasterTypeToDeepLinkApp, useDeepLinks } from 'shared/hooks/useDeepLinks';\n\nimport { SignInButtons } from 'apps/launchpad/components/sign-in-buttons/SignInButtons';\nimport { useFetchSharedResource } from 'apps/share/hooks/useFetchSharedResource';\nimport { useGeoLocation } from 'apps/sign-up/hooks/useGeoLocation';\nimport { useTrialAppLink } from 'apps/sign-up/hooks/useTrialAppLink';\n\nimport styles from './share-link-sign-in.scss';\n\nconst namespace = 'launchpad.shareLinkSignIn';\n\ninterface ShareLinkSignInProps {\n shareId: string;\n redirectUrl: string;\n customerId?: string;\n}\n\nfunction getInitialDeepLink(shareId: string, sharedResource?: SharableEntity): DeepLinkViewModel {\n return {\n id: sharedResource?.id,\n app: mapMasterTypeToDeepLinkApp(sharedResource?.typeId),\n shareId\n };\n}\n\nexport function ShareLinkSignInView(props: ShareLinkSignInProps): React.ReactElement {\n const { shareId, redirectUrl, customerId } = props;\n const sharedResource = useFetchSharedResource<SharableEntity>(shareId);\n const {\n deepLink,\n showDeepLink,\n onClickDeepLink\n } = useDeepLinks(getInitialDeepLink(shareId, sharedResource), LocationContext.Launchpad);\n const { trialAppLinkString } = useTrialAppLink();\n\n const geoLocation = useGeoLocation();\n\n if (!sharedResource)\n return <></>;\n\n return (\n <Launchpad\n title={sharedResource.name}\n imageUrl={ShareViewHelper.getImageUrl(sharedResource)}\n objectType={sharedResource.typeId}\n links={[{\n text: LanguageService.getPhrase(namespace, 'openInApp'),\n url: deepLink,\n hide: !showDeepLink,\n onClick: onClickDeepLink\n }]}\n >\n <div className={`${styles.container} m-auto`}>\n <div className={`${styles.logo} mb-4 mx-auto`}>\n <ClickViewLogo />\n </div>\n {!!sharedResource.name &&\n <h1 className='h3'>\n {sharedResource.typeId === MasterType.Video &&\n <VideoSubText type='series' video={sharedResource as Video} analyticsOptions={{}} size='sm' />}\n {sharedResource.name}\n </h1>\n }\n {'description' in sharedResource &&\n <p className='mb-0 clamp-3'>{sharedResource.description}</p>\n }\n <SignInButtons\n geoLocation={geoLocation}\n customerId={customerId}\n redirectUrl={redirectUrl}\n skipPrompt={false}\n showJoinCode={false}\n pageAppLinkString={trialAppLinkString}\n showSignUp={true}\n />\n </div>\n </Launchpad>\n );\n}","import { Flight } from 'libs/common/flight';\n\nimport { ShareRequests } from 'libs/shared/apps/share/flight-requests/ShareRequests';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { PlaylistRequests } from 'libs/shared/flight-requests/PlaylistRequests';\nimport { SeriesRequests } from 'libs/shared/flight-requests/SeriesRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { CurrentUser, ShareLink } from 'libs/shared/interfaces';\n\nexport function useFetchSharedResource<T>(shareId: string): T {\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const shareLink = Flight.useBasicFetch<ShareLink>(ShareRequests.getShareObject(shareId));\n\n function getResourceRequest(): Flight.Request {\n if (!shareLink.data || !currentUser.data)\n return null;\n\n switch (shareLink.data.objectTypeId) {\n case MasterType.Video:\n return VideoRequests.publicVideo(shareLink.data.objectId, shareId);\n case MasterType.Clip:\n return ClipRequests.publicClip(shareLink.data.objectId, shareId);\n case MasterType.Interactive:\n return InteractiveRequests.publicInteractiveMetadata(shareLink.data.objectId, shareId);\n case MasterType.Playlist:\n return PlaylistRequests.getSharedPlaylist(shareLink.data.objectId, shareId);\n case MasterType.Subject:\n return ClassificationRequests.classification(shareLink.data.objectId, currentUser.data.id);\n case MasterType.Series:\n return SeriesRequests.sharedSeries(shareLink.data.objectId, shareId);\n }\n }\n\n const resourceRequest = getResourceRequest();\n const resource = Flight.useBasicFetch<T>(resourceRequest);\n\n return resource.data;\n}","import { LocationUtils } from 'libs/common/backbone/core';\nimport { Flight } from 'libs/common/flight';\n\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { GeoLocation } from 'libs/shared/interfaces/responses/GeoLocation';\n\nconst FALLBACK_COUNTRY: GeoLocation = {\n countryCode: 'us',\n isFallback: true\n};\n\nexport function useGeoLocation(): GeoLocation {\n const geoLocation = Flight.useBasicFetch<GeoLocation>(ConfigRequests.geoLocation());\n\n const countryCode = LocationUtils.GetQuery()?.countryCode?.toLowerCase();\n if (countryCode)\n return { countryCode };\n\n if (geoLocation.hasCompleted && !geoLocation.data)\n return FALLBACK_COUNTRY;\n\n return geoLocation.data;\n}","import { useViewModel } from 'libs/common/react/hooks/UseViewModel';\n\nimport { ViewModelKeys } from 'shared/constants/LiteViewModels';\nimport { DeepLinkViewModel } from 'shared/hooks/useDeepLinks';\n\nexport function useTrialAppLink() {\n const [viewModel] = useViewModel<DeepLinkViewModel>(ViewModelKeys.OPEN_IN_APP_DATA);\n\n function getTrialAppLinkString() {\n if (!viewModel) {\n return;\n }\n const validApps = [ 'videos', 'clips', 'series', 'playlists', 'topics', 'interactives' ];\n if (!validApps.includes(viewModel.app)) {\n return;\n }\n\n const id = viewModel.id;\n switch (viewModel.app) {\n case 'videos':\n return `video:${id}`;\n case 'playlists':\n return `playlist:${id}`;\n case 'series':\n return `series:${id}`;\n case 'topics':\n return `topic:${id}`;\n case 'interactives':\n return `interactive:${id}`;\n case 'clips':\n return `clip:${id}`;\n }\n }\n\n return {\n trialAppLinkString: getTrialAppLinkString()\n };\n}","// extracted by mini-css-extract-plugin\nexport default {\"left\":\"vIypY\",\"leftTextImage\":\"YViNj\",\"right\":\"MkD4u\",\"blur\":\"X6mCh\",\"imageContainer\":\"bc7kz\",\"imagePosition\":\"JOhEj\",\"image\":\"Ef2QR\",\"thumbnail\":\"Gdurb\",\"tallposter\":\"fjVNK\",\"cover\":\"o3j31\",\"linksContainer\":\"AT9Dk\"};","import React from 'react';\n\nimport { ImageSize } from 'libs/shared/enums/Images';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { ImageHelper } from 'libs/shared/utils/ImageHelper';\n\nimport { ImageUrls } from 'shared/constants/ImageUrls';\n\nimport styles from './launchpad.scss';\n\nconst FALLBACK_IMAGES = [\n {\n bgUrl: ImageUrls.LaunchPad.BG_1\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_2\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_3\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_4\n },\n {\n bgUrl: ImageUrls.LaunchPad.BG_5\n }\n];\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars\nconst XMAS_URLS: LaunchImage[] = [\n {\n bgUrl: '/images/launchpad/xmas/2024-promo1-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo2-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo3-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo4-bg.png'\n },\n {\n bgUrl: '/images/launchpad/xmas/2024-promo5-bg.png'\n }\n];\n\nfunction mapObjectTypeToImageClass(objectType: MasterType): string {\n switch (objectType) {\n case MasterType.Video:\n case MasterType.Interactive:\n case MasterType.Clip:\n return styles.thumbnail;\n\n case MasterType.Subject:\n case MasterType.Playlist:\n return styles.cover;\n\n case MasterType.Series:\n return styles.tallposter;\n\n default:\n return '';\n }\n}\n\ninterface LaunchpadLink {\n url: string;\n text: string;\n onClick?: () => void;\n hide?: boolean;\n}\n\ninterface LaunchpadProps {\n objectType?: MasterType;\n title?: string;\n imageUrl?: string;\n links?: LaunchpadLink[];\n leftComponent?: () => JSX.Element;\n}\n\ninterface LaunchImage {\n bgUrl: string;\n textUrl?: string;\n}\n\nfunction getRandomImage(urlLists: LaunchImage[]): LaunchImage {\n return urlLists[Math.floor(Math.random() * urlLists.length)];\n}\n\nexport function Launchpad(props: React.PropsWithChildren<LaunchpadProps>): JSX.Element {\n const [ showImage, setShowImage ] = React.useState(false);\n const [ image, setImage ] = React.useState<string>('');\n const [ textImage, setTextImage ] = React.useState<string>('');\n\n const imageUrl = ImageHelper.createUrl(props.imageUrl, { size: ImageSize.Large });\n const IMAGE_URLS = FALLBACK_IMAGES;\n\n React.useEffect(() => {\n if (imageUrl || !IMAGE_URLS || IMAGE_URLS.length === 0)\n return;\n\n const image = getRandomImage(IMAGE_URLS);\n\n if (image.bgUrl) {\n setImage(image.bgUrl);\n }\n\n if (image.textUrl) {\n setTextImage(image.textUrl);\n }\n }, []);\n\n React.useEffect(() => {\n if (!imageUrl)\n return;\n\n const img = new Image();\n img.onload = () => setShowImage(true);\n img.src = imageUrl;\n return () => img.onload = null;\n }, []);\n\n return (\n <div className='d-flex'>\n { props.leftComponent ?\n props.leftComponent()\n :\n <div className={`${styles.left} bg-light`} style={{ backgroundImage: `url('${image}')` }}>\n { textImage && (\n <div className={styles.leftTextImage} style={{ backgroundImage: `url('${textImage}')` }} />\n )}\n \n {showImage &&\n <>\n <div className={styles.blur} style={{ backgroundImage: `url('${imageUrl}')` }} />\n <div className={`${styles.imageContainer} ${mapObjectTypeToImageClass(props.objectType)}`}>\n <div className={styles.imagePosition}>\n <img className={styles.image} src={imageUrl} alt={props.title} />\n </div>\n </div>\n </>\n }\n </div>\n }\n <div className={`${styles.right} bg-white d-flex flex-column`}>\n <div className={`position-absolute d-flex align-items-center ${styles.linksContainer}`}>\n {props.links?.map((link, key) => {\n if (link.hide)\n return <React.Fragment key={key}></React.Fragment>;\n\n return (\n <a key={key} href={link.url} className='info-link fw-semibold' onClick={link.onClick}>\n {link.text}\n </a>\n );\n })}\n </div>\n\n {props.children}\n </div>\n </div>\n );\n}"],"names":["US_ONLY_IDPS","name","logoUrl","url","GLOBAL_IDPS","GlobalIdpButton","props","idp","last","className","onClick","currentPathAndQuery","window","location","pathname","search","attributionData","JSON","stringify","params","encodedReferrer","AttributionHelper","r","utms","UtmHelper","getAttributionParams","href","encodeURIComponent","src","GlobalIdps","idps","length","LocalityHelper","geoLocation","countryCode","unshift","map","p","i","key","namespace","getPhrase","SignInButtons","skipPrompt","appLink","currentQuery","customerId","redirectUrl","serializedQuery","showSignUp","application","action","getAppLink","phrase","pageAppLinkString","showJoinCode","ShareLinkSignInView","shareId","sharedResource","useFetchSharedResource","useDeepLinks","id","app","typeId","getInitialDeepLink","deepLink","showDeepLink","onClickDeepLink","trialAppLinkString","useTrialAppLink","useGeoLocation","Launchpad","title","imageUrl","ShareViewHelper","objectType","links","text","LanguageService","hide","ClickViewLogo","MasterType","VideoSubText","type","video","analyticsOptions","size","description","currentUser","shareLink","resourceRequest","data","objectTypeId","objectId","getResourceRequest","FALLBACK_COUNTRY","isFallback","toLowerCase","hasCompleted","viewModel","includes","getTrialAppLinkString","FALLBACK_IMAGES","bgUrl","ImageUrls","mapObjectTypeToImageClass","showImage","setShowImage","image","setImage","textImage","setTextImage","ImageHelper","IMAGE_URLS","urlLists","Math","floor","random","textUrl","img","Image","onload","leftComponent","style","backgroundImage","alt","link","children"],"sourceRoot":""}
@@ -1,2 +1,2 @@
1
1
  "use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[2279],{26055:(e,t,r)=>{r.d(t,{A:()=>a});var a=r(32735).createContext(null)},14177:(e,t,r)=>{r.d(t,{$:()=>k});var a=r(32735),n=r(70680),o=r(81886),s=r(20354),c=r(79447),l=r(83914),i=r(83345),u=r(4594),m=r(76881),p=r(35223),d="userManager.wizardInProgress";function b(e){var t=Math.floor(e.totalItemsComplete/e.totalItems*100)||0;return a.createElement("div",null,a.createElement("div",{className:"d-flex align-items-center mb-2"},a.createElement("h2",{className:"h5 mb-0"},a.createElement(i.x,{namespace:d,phrase:"heading",options:{percentage:t,actionName:e.actionName}})),a.createElement(l.x,{svgName:p.vn.CircleCheck})),a.createElement("p",null,a.createElement(i.x,{namespace:d,phrase:"info".concat(e.actionVerb)})),a.createElement("p",{className:"mb-1"},a.createElement("span",{className:"text-info"},e.progressVerbPhrase?a.createElement("span",null,e.progressVerbPhrase):a.createElement(i.x,{namespace:d,phrase:"progressVerb".concat(e.actionVerb)}))," ",e.objectType===u.E.User&&e.userType?a.createElement(i.x,{namespace:d,phrase:e.userType===m.Y.Learner?"progressStudents":"progressStaff",options:{totalComplete:e.totalItemsComplete,total:e.totalItems,smartCount:e.totalItems}}):e.objectType===u.E.Video?a.createElement(i.x,{namespace:d,phrase:"progressVideos",options:{totalComplete:e.totalItemsComplete,total:e.totalItems,smartCount:e.totalItems}}):a.createElement(i.x,{namespace:d,phrase:"progressItems",options:{totalComplete:e.totalItemsComplete,total:e.totalItems,smartCount:e.totalItems}})),a.createElement(c.Z,{variant:"info",now:t}))}var y="userManager.wizardSubmitted";function f(e){return a.createElement("div",null,a.createElement("div",{className:"d-flex align-items-center mb-2"},a.createElement("h2",{className:"h5 mb-0"},e.actionName?a.createElement(i.x,{namespace:y,phrase:"heading",options:{actionName:e.actionName}}):a.createElement(i.x,{namespace:y,phrase:"headingGeneric"})),a.createElement(l.x,{svgName:p.vn.CircleCheck})),a.createElement("p",null,a.createElement(i.x,{namespace:y,phrase:"info".concat(e.actionVerb)})),a.createElement("p",{className:"mb-1 text-info"},a.createElement(i.x,{namespace:y,phrase:"preparing"})),a.createElement(c.Z,{variant:"info",now:0}))}var v=r(58739),g=r(94644),h=r(89476);function E(e,t){return function(e){if(Array.isArray(e))return e}(e)||function(e,t){var r=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=r){var a,n,o,s,c=[],l=!0,i=!1;try{if(o=(r=r.call(e)).next,0===t){if(Object(r)!==r)return;l=!1}else for(;!(l=(a=o.call(r)).done)&&(c.push(a.value),c.length!==t);l=!0);}catch(e){i=!0,n=e}finally{try{if(!l&&null!=r.return&&(s=r.return(),Object(s)!==s))return}finally{if(i)throw n}}return c}}(e,t)||function(e,t){if(e){if("string"==typeof e)return w(e,t);var r=Object.prototype.toString.call(e).slice(8,-1);return"Object"===r&&e.constructor&&(r=e.constructor.name),"Map"===r||"Set"===r?Array.from(e):"Arguments"===r||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(r)?w(e,t):void 0}}(e,t)||function(){throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}function w(e,t){(null==t||t>e.length)&&(t=e.length);for(var r=0,a=new Array(t);r<t;r++)a[r]=e[r];return a}var j=2e3,I=3;function k(e){var t=E(a.useState(null),2),r=t[0],c=t[1],l=E(a.useState(0),2),i=l[0],u=l[1],m=a.useRef(),p=(0,h.f)(),d=(0,n.I0)();function y(){e.pollJob(w,k)}function w(t){c(t),t.status===v.K.Completed||t.status===v.K.CompletedWithError||t.status===v.K.Failed?window.setTimeout((function(){!function(){var t;e.navLockId&&p.unlock(e.navLockId);var r={jobId:e.jobId};e.userType&&(r.userType=e.userType,d({type:s.a.Actions.INVALIDATE,keys:["school:users","user:count","search:aggregation","search:users"],request:null})),e.statusCompleteAppLink?o.Q.C$.trigger(Object.assign(Object.assign({},e.statusCompleteAppLink),{params:r})):null===(t=e.onStatusCompleted)||void 0===t||t.call(e)}()}),2e3):m.current=window.setTimeout(y,j)}function k(t){i===I&&(window.clearTimeout(m.current),e.navLockId&&p.unlock(e.navLockId),(0,g.r)(t)),u((function(e){return e+1})),m.current=window.setTimeout(y,j)}return a.useEffect((function(){return y(),function(){m.current&&window.clearTimeout(m.current)}}),[]),r&&r.status!==v.K.Submitted&&r.status!==v.K.Queued&&r.status!==v.K.Pending&&0!==r.totalItems?a.createElement(b,{totalItems:r.totalItems,totalItemsComplete:r.processedItems,userType:e.userType,objectType:e.objectType,actionName:e.actionName,actionVerb:e.actionVerb,progressVerbPhrase:e.progressVerbPhrase}):a.createElement(f,{actionName:e.actionName,actionVerb:e.actionVerb})}},58739:(e,t,r)=>{var a;r.d(t,{K:()=>a}),function(e){e[e.Submitted=0]="Submitted",e[e.Queued=1]="Queued",e[e.Pending=2]="Pending",e[e.InProgress=3]="InProgress",e[e.Completed=4]="Completed",e[e.CompletedWithError=5]="CompletedWithError",e[e.Failed=6]="Failed"}(a||(a={}))},94644:(e,t,r)=>{r.d(t,{r:()=>u});var a=r(50242),n=r(81886),o=r(67058),s=r(14553),c=r(49267),l=r(49075),i={notFound:o.d,forbidden:{rating:s.q,yearLevel:s.q,region:c.a,privacy:s.q},badRequest:l._};function u(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var o;o="number"==typeof e?e:e.status;var s=Object.assign(Object.assign({},i),t);o&&n.Q.Ry.isStatusCodeError(o)&&(o!==a.o.NotFound?o!==a.o.Forbidden?r.badRequest||n.Q.Ry.throw(new s.badRequest):r.forbidden||n.Q.Ry.throw(new s.forbidden.privacy):r.notFound||n.Q.Ry.throw(new s.notFound))}}},16695:(e,t,r)=>{r.r(t),r.d(t,{BulkUserUploadStatusPollingView:()=>y});var a=r(32735),n=r(70680),o=r(23481),s=r(20354),c=r(56532),l=r(26055),i=r(43820),u=r(14177),m=r(4594),p=r(29613),d=r(18087),b="userManager.bulkUserUploadStatusPolling";function y(e){var t=(0,n.I0)(),r=(0,d.Y)(e.userType);return a.createElement(l.A.Provider,{value:i.a.Primary},a.createElement(c.$,{appLinks:r,userType:e.userType,currentStep:"status",canAddExistingUsers:!0},a.createElement(u.$,{jobId:e.jobId,pollJob:function(r,a){s.a.fetch(t,p.q.getJobProgress(e.jobId,r,a))},objectType:m.E.User,userType:e.userType,statusCompleteAppLink:r.userUploadStatus.complete,actionName:o.T.getPhrase(b,"bulkUpload"),navLockId:c.A,actionVerb:"Create"})))}},29613:(e,t,r)=>{r.d(t,{q:()=>s});var a=r(99940),n=r(97395),o=r(149),s={createJob:function(e,t,r){return{url:"{gateway}/v1/batch/jobs",key:"create:job",type:a.k.POST,data:e,success:t,error:r}},getJobs:function(e){var t={},r=[],a=[];return e.cursor&&(t.cursor=e.cursor),e.sort&&("oldest"===e.sort?t.order="ASC":t.order="DESC"),e.bulkActionType?(r=Array.isArray(e.bulkActionType)?e.bulkActionType:[e.bulkActionType],t.type=r):t.type=o.O,e.userType&&(a=Array.isArray(e.userType)?e.userType:[e.userType],t.dataType=a),{url:n._.urlBuilder("{gateway}/v1/batch/jobs",t),key:"batch:jobs:".concat(e.cursor,":").concat(e.sort,":").concat(r.sort().join(":"),":").concat(a.sort().join(":"))}},getJob:function(e){return{url:"{gateway}/v1/batch/jobs/".concat(e),key:"job:".concat(e)}},getJobProgress:function(e,t,r){return{url:"{gateway}/v1/batch/jobs/".concat(e,"/progress"),key:"job:".concat(e,":progress"),invalidationKeys:"job:".concat(e,":progress"),success:t,error:r}},getJobResults:function(e,t,r,a,o){var s={status:t};return r&&(s.cursor=r),{url:n._.urlBuilder("{gateway}/v1/batch/jobs/".concat(e,"/results"),s),key:"job:".concat(e,":results:").concat(t,":").concat(r),success:a,error:o}},getYearGroupRolloverStatus:function(e){return{url:"{gateway}/v1/batch/validations/customers/".concat(e,"/year-group-roll-over"),key:"year:group:rollover:status"}},sendJobReports:function(e){return{url:"{gateway}/v1/batch/results/export",key:"send:job:reports:".concat(e.sort().join(":")),type:a.k.POST,data:{jobIds:e}}},getJobSummary:function(e){return{url:"{gateway}/v1/batch/jobs/".concat(e,"/summary"),key:"job:summary:".concat(e)}}}},79447:(e,t,r)=>{r.d(t,{Z:()=>d});var a=r(95685),n=r.n(a),o=r(32735),s=r(46304),c=r(58661),l=r(74512);const i=1e3;function u(e,t,r){const a=(e-t)/(r-t)*100;return Math.round(a*i)/i}function m({min:e,now:t,max:r,label:a,visuallyHidden:o,striped:s,animated:c,className:i,style:m,variant:p,bsPrefix:d,...b},y){return(0,l.jsx)("div",{ref:y,...b,role:"progressbar",className:n()(i,`${d}-bar`,{[`bg-${p}`]:p,[`${d}-bar-animated`]:c,[`${d}-bar-striped`]:c||s}),style:{width:`${u(t,e,r)}%`,...m},"aria-valuenow":t,"aria-valuemin":e,"aria-valuemax":r,children:o?(0,l.jsx)("span",{className:"visually-hidden",children:a}):a})}const p=o.forwardRef((({isChild:e=!1,...t},r)=>{const a={min:0,max:100,animated:!1,visuallyHidden:!1,striped:!1,...t};if(a.bsPrefix=(0,s.vE)(a.bsPrefix,"progress"),e)return m(a,r);const{min:i,now:u,max:p,label:d,visuallyHidden:b,striped:y,animated:f,bsPrefix:v,variant:g,className:h,children:E,...w}=a;return(0,l.jsx)("div",{ref:r,...w,className:n()(h,v),children:E?(0,c.UI)(E,(e=>(0,o.cloneElement)(e,{isChild:!0}))):m({min:i,now:u,max:p,label:d,visuallyHidden:b,striped:y,animated:f,bsPrefix:v,variant:g},r)})}));p.displayName="ProgressBar";const d=p}}]);
2
- //# sourceMappingURL=2279-5e92c84310-lite.chunk.js.map
2
+ //# sourceMappingURL=2279-252e92e1d8-lite.chunk.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"scripts/2279-5e92c84310-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/user-manager/context/UserManagerClientContext.ts","file:///app/packages/libs/shared/src/components/wizard/status/statuses/in-progress/WizardInProgress.tsx","file:///app/packages/libs/shared/src/components/wizard/status/statuses/submitted/WizardSubmitted.tsx","file:///app/packages/libs/shared/src/components/wizard/status/polling/WizardPolling.tsx","file:///app/packages/libs/shared/src/enums/BatchJobStatus.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/projects/lite/src/apps/user-manager/views/bulk-user-upload/status/polling/BulkUserUploadStatusPollingView.tsx","file:///app/packages/projects/lite/src/shared/flight-requests/JobRequests.ts","file:///app/node_modules/react-bootstrap/esm/ProgressBar.js"],"sourcesContent":["import React from 'react';\n\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\n\nexport const UserManagerClientContext = React.createContext<UserManagerClient>(null);","import React from 'react';\nimport { ProgressBar } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { WizardActionVerb } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'userManager.wizardInProgress';\n\ninterface WizardInProgressProps {\n userType?: UserGroup;\n totalItems: number;\n totalItemsComplete: number;\n actionName: string;\n actionVerb: WizardActionVerb;\n objectType: MasterType;\n progressVerbPhrase?: string;\n}\n\nexport function WizardInProgress(props: WizardInProgressProps): JSX.Element {\n const percentage = Math.floor(props.totalItemsComplete / props.totalItems * 100) || 0;\n\n function renderProgressText() {\n if (props.objectType === MasterType.User && props.userType) {\n return (\n <Text\n namespace={namespace}\n phrase={props.userType === UserGroup.Learner ? 'progressStudents' : 'progressStaff'}\n options={{ totalComplete: props.totalItemsComplete, total: props.totalItems, smartCount: props.totalItems }}\n />\n );\n }\n\n if (props.objectType === MasterType.Video) {\n return (\n <Text\n namespace={namespace}\n phrase='progressVideos'\n options={{ totalComplete: props.totalItemsComplete, total: props.totalItems, smartCount: props.totalItems }}\n />\n );\n }\n\n return (\n <Text\n namespace={namespace}\n phrase='progressItems'\n options={{ totalComplete: props.totalItemsComplete, total: props.totalItems, smartCount: props.totalItems }}\n />\n );\n }\n\n return (\n <div>\n <div className='d-flex align-items-center mb-2'>\n <h2 className='h5 mb-0'>\n <Text namespace={namespace} phrase='heading' options={{ percentage, actionName: props.actionName }} />\n </h2>\n <SvgContainer svgName={cvSvgLibrary.CircleCheck} />\n </div>\n\n <p>\n <Text namespace={namespace} phrase={`info${props.actionVerb}`} />\n </p>\n\n <p className='mb-1'>\n <span className='text-info'>\n {props.progressVerbPhrase ? (\n <span>{props.progressVerbPhrase}</span>\n ) : (\n <Text namespace={namespace} phrase={`progressVerb${props.actionVerb}`} />\n )}\n </span>\n &nbsp;\n {renderProgressText()}\n </p>\n <ProgressBar variant='info' now={percentage} />\n </div>\n );\n}","import React from 'react';\nimport { ProgressBar } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WizardActionVerb } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'userManager.wizardSubmitted';\n\ninterface WizardSubmittedProps {\n actionName?: string;\n actionVerb: WizardActionVerb;\n}\n\nexport function WizardSubmitted(props: WizardSubmittedProps): JSX.Element {\n return (\n <div>\n <div className='d-flex align-items-center mb-2'>\n <h2 className='h5 mb-0'>\n {props.actionName\n ? <Text namespace={namespace} phrase='heading' options={{ actionName: props.actionName }} />\n : <Text namespace={namespace} phrase='headingGeneric' />\n }\n </h2>\n <SvgContainer svgName={cvSvgLibrary.CircleCheck} />\n </div>\n\n <p>\n <Text namespace={namespace} phrase={`info${props.actionVerb}`} />\n </p>\n\n <p className='mb-1 text-info'>\n <Text namespace={namespace} phrase='preparing' />\n </p>\n <ProgressBar variant='info' now={0} />\n </div>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { WizardInProgress } from 'libs/shared/components/wizard/status/statuses/in-progress/WizardInProgress';\nimport { WizardSubmitted } from 'libs/shared/components/wizard/status/statuses/submitted/WizardSubmitted';\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { useNavLock } from 'libs/shared/hooks/useNavLock';\nimport { BatchJobProgress, WizardActionVerb } from 'libs/shared/interfaces';\n\nconst POLLING_INTERVAL = 2000;\nconst MAX_CONSECUTIVE_ERROR_COUNT = 3; // If the polling endpoint errors 3 times in a row, we will cancel\n\nexport type WizardPollJobFn = (onSuccess: (progress: BatchJobProgress) => void, onError: (xhr: Xhr) => void) => void;\n\ninterface WizardPollingProps {\n jobId: string;\n userType?: UserGroup;\n statusCompleteAppLink?: Core.AppLink;\n onStatusCompleted?: () => void;\n pollJob: WizardPollJobFn;\n actionName: string;\n navLockId?: string;\n actionVerb: WizardActionVerb;\n objectType?: MasterType;\n progressVerbPhrase?: string;\n}\n\nexport function WizardPolling(props: WizardPollingProps): JSX.Element {\n const [ progress, setProgress ] = React.useState<BatchJobProgress>(null);\n const [ consecutiveErrorCount, setConsecutiveErrorCount ] = React.useState(0);\n\n const timeoutIdRef = React.useRef<number>();\n\n const navLock = useNavLock();\n const dispatch = useDispatch();\n\n // Kick off polling for the running batch job. Polling will be stopped if user navigates away.\n React.useEffect(() => {\n pollJob();\n\n return () => {\n if (!timeoutIdRef.current)\n return;\n\n window.clearTimeout(timeoutIdRef.current);\n };\n }, []);\n\n function pollJob(): void {\n props.pollJob(onPollSuccess, onPollError);\n }\n\n function onPollSuccess(currentProgress: BatchJobProgress): void {\n setProgress(currentProgress);\n\n // Job is considered completed if status matches any of the following values\n const jobHasCompleted = (\n currentProgress.status === BatchJobStatus.Completed ||\n currentProgress.status === BatchJobStatus.CompletedWithError ||\n currentProgress.status === BatchJobStatus.Failed\n );\n\n if (!jobHasCompleted) {\n timeoutIdRef.current = window.setTimeout(pollJob, POLLING_INTERVAL);\n return;\n }\n\n /**\n * When the job progress is 100%, we want to provide 2 seconds for the\n * progress bar animation to complete before navigating to the \"complete\"\n * view. Otherwise it's a little bit jarring.\n */\n window.setTimeout(() => {\n onCompleteJob();\n }, 2000);\n }\n\n function onPollError(xhr: Xhr): void {\n if (consecutiveErrorCount === MAX_CONSECUTIVE_ERROR_COUNT) {\n window.clearTimeout(timeoutIdRef.current);\n if (props.navLockId)\n navLock.unlock(props.navLockId);\n handleHttpError(xhr);\n }\n\n setConsecutiveErrorCount(currentVal => currentVal + 1);\n timeoutIdRef.current = window.setTimeout(pollJob, POLLING_INTERVAL);\n }\n\n function onCompleteJob(): void {\n if (props.navLockId)\n navLock.unlock(props.navLockId);\n\n const params: HashObject = { jobId: props.jobId };\n\n if (props.userType) {\n params.userType = props.userType;\n\n // Clear all user's in flight cache. This way any users updated in bulk actions will have up to date data.\n dispatch({\n type: Flight.Actions.INVALIDATE,\n keys: [ 'school:users', 'user:count', 'search:aggregation', 'search:users' ],\n request: null\n });\n }\n if (props.statusCompleteAppLink) {\n Core.AppLinkHelper.trigger({\n ...props.statusCompleteAppLink,\n params: params\n });\n return;\n }\n\n props.onStatusCompleted?.();\n }\n\n const hasNotStarted = !!(\n !progress ||\n progress.status === BatchJobStatus.Submitted ||\n progress.status === BatchJobStatus.Queued ||\n progress.status === BatchJobStatus.Pending\n );\n\n if (hasNotStarted || progress.totalItems === 0)\n return <WizardSubmitted actionName={props.actionName} actionVerb={props.actionVerb} />;\n\n return (\n <WizardInProgress\n totalItems={progress.totalItems}\n totalItemsComplete={progress.processedItems}\n userType={props.userType}\n objectType={props.objectType}\n actionName={props.actionName}\n actionVerb={props.actionVerb}\n progressVerbPhrase={props.progressVerbPhrase}\n />\n );\n}","export enum BatchJobStatus {\n Submitted = 0,\n Queued = 1,\n Pending = 2,\n InProgress = 3,\n Completed = 4,\n CompletedWithError = 5,\n Failed = 6\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { BULK_USER_UPLOAD_NAV_LOCK_ID, BulkUserUploadWizardLayout } from 'libs/shared/apps/user-manager/components/bulk-upload/layout/BulkUserUploadWizardLayout';\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { UserWizardStatusParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserWizardParams';\nimport { WizardPolling } from 'libs/shared/components/wizard/status/polling/WizardPolling';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BatchJobProgress } from 'libs/shared/interfaces';\n\nimport { JobRequests } from 'shared/flight-requests/JobRequests';\n\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nconst namespace = 'userManager.bulkUserUploadStatusPolling';\n\nexport function BulkUserUploadStatusPollingView(props: UserWizardStatusParams): JSX.Element {\n const dispatch = useDispatch();\n const appLinks = getUserManagerAppLinks(props.userType);\n\n function pollJob(onSuccess: (progress: BatchJobProgress) => void, onError: (xhr: Xhr) => void): void {\n Flight.fetch(dispatch, JobRequests.getJobProgress(props.jobId, onSuccess, onError));\n }\n\n return (\n <UserManagerClientContext.Provider value={UserManagerClient.Primary}>\n <BulkUserUploadWizardLayout\n appLinks={appLinks}\n userType={props.userType}\n currentStep='status'\n canAddExistingUsers\n >\n <WizardPolling\n jobId={props.jobId}\n pollJob={pollJob}\n objectType={MasterType.User}\n userType={props.userType}\n statusCompleteAppLink={appLinks.userUploadStatus.complete}\n actionName={LanguageService.getPhrase(namespace, 'bulkUpload')}\n navLockId={BULK_USER_UPLOAD_NAV_LOCK_ID}\n actionVerb='Create'\n />\n </BulkUserUploadWizardLayout>\n </UserManagerClientContext.Provider>\n );\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { UserAuditLogQueryParams } from 'libs/shared/apps/user-manager/components/audit-log/components/audit-log-filters/UserAuditLogFilters';\nimport { SUPPORTED_BATCH_JOB_TYPES } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { BatchJobResultStatus } from 'libs/shared/enums/BatchJobResultStatus';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { BaseObject, BatchJob, BatchJobProgress, BatchJobResultsResponse, CreateBatchJobRequest } from 'libs/shared/interfaces';\n\nexport const JobRequests = {\n createJob(\n data: CreateBatchJobRequest,\n success?: (job: BatchJob) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/batch/jobs',\n key: 'create:job',\n type: HttpVerbs.POST,\n data,\n success,\n error\n };\n },\n\n getJobs(queryParams: UserAuditLogQueryParams): Flight.Request {\n const params: HashObject = {};\n\n let bulkActionTypes: BatchJobType[] = [];\n let userTypes: UserGroup[] = [];\n\n if (queryParams.cursor)\n params.cursor = queryParams.cursor;\n\n if (queryParams.sort) {\n if (queryParams.sort === 'oldest')\n params.order = 'ASC';\n else\n params.order = 'DESC';\n }\n\n if (queryParams.bulkActionType) {\n bulkActionTypes = Array.isArray(queryParams.bulkActionType)\n ? queryParams.bulkActionType\n : [queryParams.bulkActionType];\n\n params.type = bulkActionTypes;\n } else {\n // only show supported type in the table by default\n params.type = SUPPORTED_BATCH_JOB_TYPES;\n }\n\n if (queryParams.userType) {\n userTypes = Array.isArray(queryParams.userType)\n ? queryParams.userType\n : [queryParams.userType];\n\n params.dataType = userTypes;\n }\n \n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/batch/jobs', params),\n key: `batch:jobs:${queryParams.cursor}:${queryParams.sort}:${bulkActionTypes.sort().join(':')}:${userTypes.sort().join(':')}`\n };\n },\n\n getJob(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}`,\n key: `job:${id}`\n };\n },\n\n getJobProgress(\n id: string,\n success?: (progress: BatchJobProgress) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/progress`,\n key: `job:${id}:progress`,\n invalidationKeys: `job:${id}:progress`,\n success,\n error\n };\n },\n\n getJobResults<TObject extends BaseObject>(\n id: string,\n status: BatchJobResultStatus,\n cursor?: string,\n success?: (results: BatchJobResultsResponse<TObject>) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n const params: HashObject = {\n status\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/batch/jobs/${id}/results`, params),\n key: `job:${id}:results:${status}:${cursor}`,\n success,\n error\n };\n },\n\n getYearGroupRolloverStatus(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/validations/customers/${customerId}/year-group-roll-over`,\n key: 'year:group:rollover:status'\n };\n },\n\n sendJobReports(ids: string[]): Flight.Request {\n return {\n url: '{gateway}/v1/batch/results/export',\n key: `send:job:reports:${ids.sort().join(':')}`,\n type: HttpVerbs.POST,\n data: {\n jobIds: ids\n }\n };\n },\n\n getJobSummary(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/summary`,\n key: `job:summary:${id}`\n };\n }\n};","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { cloneElement } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { map } from './ElementChildren';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst ROUND_PRECISION = 1000;\n\n/**\n * Validate that children, if any, are instances of `ProgressBar`.\n */\nfunction onlyProgressBar(props, propName, componentName) {\n const children = props[propName];\n if (!children) {\n return null;\n }\n let error = null;\n React.Children.forEach(children, child => {\n if (error) {\n return;\n }\n\n /**\n * Compare types in a way that works with libraries that patch and proxy\n * components like react-hot-loader.\n *\n * see https://github.com/gaearon/react-hot-loader#checking-element-types\n */\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n const element = /*#__PURE__*/_jsx(ProgressBar, {});\n if (child.type === element.type) return;\n const childType = child.type;\n const childIdentifier = /*#__PURE__*/React.isValidElement(child) ? childType.displayName || childType.name || childType : child;\n error = new Error(`Children of ${componentName} can contain only ProgressBar ` + `components. Found ${childIdentifier}.`);\n });\n return error;\n}\nfunction getPercentage(now, min, max) {\n const percentage = (now - min) / (max - min) * 100;\n return Math.round(percentage * ROUND_PRECISION) / ROUND_PRECISION;\n}\nfunction renderProgressBar({\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n className,\n style,\n variant,\n bsPrefix,\n ...props\n}, ref) {\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n ...props,\n role: \"progressbar\",\n className: classNames(className, `${bsPrefix}-bar`, {\n [`bg-${variant}`]: variant,\n [`${bsPrefix}-bar-animated`]: animated,\n [`${bsPrefix}-bar-striped`]: animated || striped\n }),\n style: {\n width: `${getPercentage(now, min, max)}%`,\n ...style\n },\n \"aria-valuenow\": now,\n \"aria-valuemin\": min,\n \"aria-valuemax\": max,\n children: visuallyHidden ? /*#__PURE__*/_jsx(\"span\", {\n className: \"visually-hidden\",\n children: label\n }) : label\n });\n}\nconst ProgressBar = /*#__PURE__*/React.forwardRef(({\n isChild = false,\n ...rest\n}, ref) => {\n const props = {\n min: 0,\n max: 100,\n animated: false,\n visuallyHidden: false,\n striped: false,\n ...rest\n };\n props.bsPrefix = useBootstrapPrefix(props.bsPrefix, 'progress');\n if (isChild) {\n return renderProgressBar(props, ref);\n }\n const {\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n bsPrefix,\n variant,\n className,\n children,\n ...wrapperProps\n } = props;\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n ...wrapperProps,\n className: classNames(className, bsPrefix),\n children: children ? map(children, child => /*#__PURE__*/cloneElement(child, {\n isChild: true\n })) : renderProgressBar({\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n bsPrefix,\n variant\n }, ref)\n });\n});\nProgressBar.displayName = 'ProgressBar';\nexport default ProgressBar;"],"names":["UserManagerClientContext","namespace","WizardInProgress","props","percentage","Math","floor","totalItemsComplete","totalItems","className","Text","phrase","options","actionName","SvgContainer","svgName","actionVerb","progressVerbPhrase","objectType","MasterType","userType","UserGroup","totalComplete","total","smartCount","ProgressBar","variant","now","WizardSubmitted","POLLING_INTERVAL","MAX_CONSECUTIVE_ERROR_COUNT","WizardPolling","progress","setProgress","consecutiveErrorCount","setConsecutiveErrorCount","timeoutIdRef","navLock","useNavLock","dispatch","pollJob","onPollSuccess","onPollError","currentProgress","status","BatchJobStatus","window","setTimeout","navLockId","unlock","params","jobId","type","keys","request","statusCompleteAppLink","onStatusCompleted","onCompleteJob","current","xhr","clearTimeout","currentVal","processedItems","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","errorMap","BulkUserUploadStatusPollingView","appLinks","value","currentStep","canAddExistingUsers","onSuccess","onError","userUploadStatus","complete","JobRequests","createJob","data","success","error","url","key","getJobs","queryParams","bulkActionTypes","userTypes","cursor","sort","order","bulkActionType","Array","isArray","dataType","join","getJob","id","getJobProgress","invalidationKeys","getJobResults","getYearGroupRolloverStatus","customerId","sendJobReports","ids","jobIds","getJobSummary","ROUND_PRECISION","getPercentage","min","max","round","renderProgressBar","label","visuallyHidden","striped","animated","style","bsPrefix","ref","role","width","children","isChild","rest","wrapperProps","child","cloneElement","displayName"],"sourceRoot":""}
1
+ {"version":3,"file":"scripts/2279-252e92e1d8-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/user-manager/context/UserManagerClientContext.ts","file:///app/packages/libs/shared/src/components/wizard/status/statuses/in-progress/WizardInProgress.tsx","file:///app/packages/libs/shared/src/components/wizard/status/statuses/submitted/WizardSubmitted.tsx","file:///app/packages/libs/shared/src/components/wizard/status/polling/WizardPolling.tsx","file:///app/packages/libs/shared/src/enums/BatchJobStatus.ts","file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/projects/lite/src/apps/user-manager/views/bulk-user-upload/status/polling/BulkUserUploadStatusPollingView.tsx","file:///app/packages/projects/lite/src/shared/flight-requests/JobRequests.ts","file:///app/node_modules/react-bootstrap/esm/ProgressBar.js"],"sourcesContent":["import React from 'react';\n\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\n\nexport const UserManagerClientContext = React.createContext<UserManagerClient>(null);","import React from 'react';\nimport { ProgressBar } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { WizardActionVerb } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'userManager.wizardInProgress';\n\ninterface WizardInProgressProps {\n userType?: UserGroup;\n totalItems: number;\n totalItemsComplete: number;\n actionName: string;\n actionVerb: WizardActionVerb;\n objectType: MasterType;\n progressVerbPhrase?: string;\n}\n\nexport function WizardInProgress(props: WizardInProgressProps): JSX.Element {\n const percentage = Math.floor(props.totalItemsComplete / props.totalItems * 100) || 0;\n\n function renderProgressText() {\n if (props.objectType === MasterType.User && props.userType) {\n return (\n <Text\n namespace={namespace}\n phrase={props.userType === UserGroup.Learner ? 'progressStudents' : 'progressStaff'}\n options={{ totalComplete: props.totalItemsComplete, total: props.totalItems, smartCount: props.totalItems }}\n />\n );\n }\n\n if (props.objectType === MasterType.Video) {\n return (\n <Text\n namespace={namespace}\n phrase='progressVideos'\n options={{ totalComplete: props.totalItemsComplete, total: props.totalItems, smartCount: props.totalItems }}\n />\n );\n }\n\n return (\n <Text\n namespace={namespace}\n phrase='progressItems'\n options={{ totalComplete: props.totalItemsComplete, total: props.totalItems, smartCount: props.totalItems }}\n />\n );\n }\n\n return (\n <div>\n <div className='d-flex align-items-center mb-2'>\n <h2 className='h5 mb-0'>\n <Text namespace={namespace} phrase='heading' options={{ percentage, actionName: props.actionName }} />\n </h2>\n <SvgContainer svgName={cvSvgLibrary.CircleCheck} />\n </div>\n\n <p>\n <Text namespace={namespace} phrase={`info${props.actionVerb}`} />\n </p>\n\n <p className='mb-1'>\n <span className='text-info'>\n {props.progressVerbPhrase ? (\n <span>{props.progressVerbPhrase}</span>\n ) : (\n <Text namespace={namespace} phrase={`progressVerb${props.actionVerb}`} />\n )}\n </span>\n &nbsp;\n {renderProgressText()}\n </p>\n <ProgressBar variant='info' now={percentage} />\n </div>\n );\n}","import React from 'react';\nimport { ProgressBar } from 'react-bootstrap';\n\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { WizardActionVerb } from 'libs/shared/interfaces';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nconst namespace = 'userManager.wizardSubmitted';\n\ninterface WizardSubmittedProps {\n actionName?: string;\n actionVerb: WizardActionVerb;\n}\n\nexport function WizardSubmitted(props: WizardSubmittedProps): JSX.Element {\n return (\n <div>\n <div className='d-flex align-items-center mb-2'>\n <h2 className='h5 mb-0'>\n {props.actionName\n ? <Text namespace={namespace} phrase='heading' options={{ actionName: props.actionName }} />\n : <Text namespace={namespace} phrase='headingGeneric' />\n }\n </h2>\n <SvgContainer svgName={cvSvgLibrary.CircleCheck} />\n </div>\n\n <p>\n <Text namespace={namespace} phrase={`info${props.actionVerb}`} />\n </p>\n\n <p className='mb-1 text-info'>\n <Text namespace={namespace} phrase='preparing' />\n </p>\n <ProgressBar variant='info' now={0} />\n </div>\n );\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { WizardInProgress } from 'libs/shared/components/wizard/status/statuses/in-progress/WizardInProgress';\nimport { WizardSubmitted } from 'libs/shared/components/wizard/status/statuses/submitted/WizardSubmitted';\nimport { BatchJobStatus } from 'libs/shared/enums/BatchJobStatus';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { handleHttpError } from 'libs/shared/errors/handlers/HttpErrorHandlers';\nimport { useNavLock } from 'libs/shared/hooks/useNavLock';\nimport { BatchJobProgress, WizardActionVerb } from 'libs/shared/interfaces';\n\nconst POLLING_INTERVAL = 2000;\nconst MAX_CONSECUTIVE_ERROR_COUNT = 3; // If the polling endpoint errors 3 times in a row, we will cancel\n\nexport type WizardPollJobFn = (onSuccess: (progress: BatchJobProgress) => void, onError: (xhr: Xhr) => void) => void;\n\ninterface WizardPollingProps {\n jobId: string;\n userType?: UserGroup;\n statusCompleteAppLink?: Core.AppLink;\n onStatusCompleted?: () => void;\n pollJob: WizardPollJobFn;\n actionName: string;\n navLockId?: string;\n actionVerb: WizardActionVerb;\n objectType?: MasterType;\n progressVerbPhrase?: string;\n}\n\nexport function WizardPolling(props: WizardPollingProps): JSX.Element {\n const [ progress, setProgress ] = React.useState<BatchJobProgress>(null);\n const [ consecutiveErrorCount, setConsecutiveErrorCount ] = React.useState(0);\n\n const timeoutIdRef = React.useRef<number>();\n\n const navLock = useNavLock();\n const dispatch = useDispatch();\n\n // Kick off polling for the running batch job. Polling will be stopped if user navigates away.\n React.useEffect(() => {\n pollJob();\n\n return () => {\n if (!timeoutIdRef.current)\n return;\n\n window.clearTimeout(timeoutIdRef.current);\n };\n }, []);\n\n function pollJob(): void {\n props.pollJob(onPollSuccess, onPollError);\n }\n\n function onPollSuccess(currentProgress: BatchJobProgress): void {\n setProgress(currentProgress);\n\n // Job is considered completed if status matches any of the following values\n const jobHasCompleted = (\n currentProgress.status === BatchJobStatus.Completed ||\n currentProgress.status === BatchJobStatus.CompletedWithError ||\n currentProgress.status === BatchJobStatus.Failed\n );\n\n if (!jobHasCompleted) {\n timeoutIdRef.current = window.setTimeout(pollJob, POLLING_INTERVAL);\n return;\n }\n\n /**\n * When the job progress is 100%, we want to provide 2 seconds for the\n * progress bar animation to complete before navigating to the \"complete\"\n * view. Otherwise it's a little bit jarring.\n */\n window.setTimeout(() => {\n onCompleteJob();\n }, 2000);\n }\n\n function onPollError(xhr: Xhr): void {\n if (consecutiveErrorCount === MAX_CONSECUTIVE_ERROR_COUNT) {\n window.clearTimeout(timeoutIdRef.current);\n if (props.navLockId)\n navLock.unlock(props.navLockId);\n handleHttpError(xhr);\n }\n\n setConsecutiveErrorCount(currentVal => currentVal + 1);\n timeoutIdRef.current = window.setTimeout(pollJob, POLLING_INTERVAL);\n }\n\n function onCompleteJob(): void {\n if (props.navLockId)\n navLock.unlock(props.navLockId);\n\n const params: HashObject = { jobId: props.jobId };\n\n if (props.userType) {\n params.userType = props.userType;\n\n // Clear all user's in flight cache. This way any users updated in bulk actions will have up to date data.\n dispatch({\n type: Flight.Actions.INVALIDATE,\n keys: [ 'school:users', 'user:count', 'search:aggregation', 'search:users' ],\n request: null\n });\n }\n if (props.statusCompleteAppLink) {\n Core.AppLinkHelper.trigger({\n ...props.statusCompleteAppLink,\n params: params\n });\n return;\n }\n\n props.onStatusCompleted?.();\n }\n\n const hasNotStarted = !!(\n !progress ||\n progress.status === BatchJobStatus.Submitted ||\n progress.status === BatchJobStatus.Queued ||\n progress.status === BatchJobStatus.Pending\n );\n\n if (hasNotStarted || progress.totalItems === 0)\n return <WizardSubmitted actionName={props.actionName} actionVerb={props.actionVerb} />;\n\n return (\n <WizardInProgress\n totalItems={progress.totalItems}\n totalItemsComplete={progress.processedItems}\n userType={props.userType}\n objectType={props.objectType}\n actionName={props.actionName}\n actionVerb={props.actionVerb}\n progressVerbPhrase={props.progressVerbPhrase}\n />\n );\n}","export enum BatchJobStatus {\n Submitted = 0,\n Queued = 1,\n Pending = 2,\n InProgress = 3,\n Completed = 4,\n CompletedWithError = 5,\n Failed = 6\n}","import { BaseError } from 'libs/common/backbone/core/BaseError';\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { Core } from 'libs/common/core';\n\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { PrivateResourceError } from 'libs/shared/errors/general/private-resource/PrivateResourceError';\nimport { RegionLockedResourceError } from 'libs/shared/errors/general/region-locked-resource/RegionLockedResourceError';\nimport { UnspecifiedError } from 'libs/shared/errors/general/unspecified-error/UnspecifiedError';\nimport { VideoTypes } from 'libs/shared/interfaces';\n\nexport interface HttpErrorMap {\n notFound?: new () => BaseError;\n forbidden?: {\n rating?: new (description: string) => BaseError;\n yearLevel?: new (description: string) => BaseError;\n region?: new () => BaseError;\n privacy?: new (video?: VideoTypes) => BaseError;\n };\n badRequest?: new () => BaseError;\n}\n\nexport type IgnoreHttpErrorMap = {\n [key in keyof HttpErrorMap]: boolean;\n};\n\nconst defaultErrors: HttpErrorMap = {\n notFound: NotFoundError,\n forbidden: {\n rating: PrivateResourceError,\n yearLevel: PrivateResourceError,\n region: RegionLockedResourceError,\n privacy: PrivateResourceError\n },\n badRequest: UnspecifiedError\n};\n\nexport function handleHttpError(\n info: HttpStatus | Xhr,\n customErrorMap: HttpErrorMap = {},\n /**\n * Prevent certain errors in the errorMap from being thrown\n * so that you may implement your own handler\n */\n ignoreMap: IgnoreHttpErrorMap = {}\n): void {\n if (!info)\n return;\n\n let statusCode: HttpStatus;\n\n if (typeof(info) === 'number') {\n statusCode = info;\n } else {\n statusCode = info.status;\n }\n\n const errorMap = {\n ...defaultErrors,\n ...customErrorMap\n };\n\n if (!statusCode)\n return;\n\n if (!Core.ErrorHelper.isStatusCodeError(statusCode))\n return;\n\n if (statusCode === HttpStatus.NotFound) {\n if (!ignoreMap.notFound)\n Core.ErrorHelper.throw(new errorMap.notFound());\n return;\n }\n\n if (statusCode === HttpStatus.Forbidden) {\n /**\n * TODO: Work out how to go about handling all forbidden errors, such as region locking, year levels,\n * ratings, and privacy.\n */\n if (!ignoreMap.forbidden)\n Core.ErrorHelper.throw(new errorMap.forbidden.privacy());\n return;\n }\n\n if (!ignoreMap.badRequest)\n Core.ErrorHelper.throw(new errorMap.badRequest());\n}\n\nexport function handleXhrError(xhr: Xhr, customErrorMap?: HttpErrorMap): void {\n handleHttpError(xhr.status, customErrorMap);\n}","import React from 'react';\nimport { useDispatch } from 'react-redux';\n\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\n\nimport { BULK_USER_UPLOAD_NAV_LOCK_ID, BulkUserUploadWizardLayout } from 'libs/shared/apps/user-manager/components/bulk-upload/layout/BulkUserUploadWizardLayout';\nimport { UserManagerClientContext } from 'libs/shared/apps/user-manager/context/UserManagerClientContext';\nimport { UserManagerClient } from 'libs/shared/apps/user-manager/enums/UserManagerClient';\nimport { UserWizardStatusParams } from 'libs/shared/apps/user-manager/interfaces/query-params/UserWizardParams';\nimport { WizardPolling } from 'libs/shared/components/wizard/status/polling/WizardPolling';\nimport { MasterType } from 'libs/shared/enums/MasterType';\nimport { BatchJobProgress } from 'libs/shared/interfaces';\n\nimport { JobRequests } from 'shared/flight-requests/JobRequests';\n\nimport { getUserManagerAppLinks } from 'apps/user-manager/utils/LiteUserManagerAppLinks';\n\nconst namespace = 'userManager.bulkUserUploadStatusPolling';\n\nexport function BulkUserUploadStatusPollingView(props: UserWizardStatusParams): JSX.Element {\n const dispatch = useDispatch();\n const appLinks = getUserManagerAppLinks(props.userType);\n\n function pollJob(onSuccess: (progress: BatchJobProgress) => void, onError: (xhr: Xhr) => void): void {\n Flight.fetch(dispatch, JobRequests.getJobProgress(props.jobId, onSuccess, onError));\n }\n\n return (\n <UserManagerClientContext.Provider value={UserManagerClient.Primary}>\n <BulkUserUploadWizardLayout\n appLinks={appLinks}\n userType={props.userType}\n currentStep='status'\n canAddExistingUsers\n >\n <WizardPolling\n jobId={props.jobId}\n pollJob={pollJob}\n objectType={MasterType.User}\n userType={props.userType}\n statusCompleteAppLink={appLinks.userUploadStatus.complete}\n actionName={LanguageService.getPhrase(namespace, 'bulkUpload')}\n navLockId={BULK_USER_UPLOAD_NAV_LOCK_ID}\n actionVerb='Create'\n />\n </BulkUserUploadWizardLayout>\n </UserManagerClientContext.Provider>\n );\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Xhr } from 'libs/common/backbone/interfaces';\nimport { UrlHelper } from 'libs/common/backbone/utils/UrlHelper';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { UserAuditLogQueryParams } from 'libs/shared/apps/user-manager/components/audit-log/components/audit-log-filters/UserAuditLogFilters';\nimport { SUPPORTED_BATCH_JOB_TYPES } from 'libs/shared/apps/user-manager/utils/BulkUserActionsHelper';\nimport { BatchJobResultStatus } from 'libs/shared/enums/BatchJobResultStatus';\nimport { BatchJobType } from 'libs/shared/enums/BatchJobType';\nimport { UserGroup } from 'libs/shared/enums/UserGroup';\nimport { BaseObject, BatchJob, BatchJobProgress, BatchJobResultsResponse, CreateBatchJobRequest } from 'libs/shared/interfaces';\n\nexport const JobRequests = {\n createJob(\n data: CreateBatchJobRequest,\n success?: (job: BatchJob) => void,\n error?: () => void\n ): Flight.Request {\n return {\n url: '{gateway}/v1/batch/jobs',\n key: 'create:job',\n type: HttpVerbs.POST,\n data,\n success,\n error\n };\n },\n\n getJobs(queryParams: UserAuditLogQueryParams): Flight.Request {\n const params: HashObject = {};\n\n let bulkActionTypes: BatchJobType[] = [];\n let userTypes: UserGroup[] = [];\n\n if (queryParams.cursor)\n params.cursor = queryParams.cursor;\n\n if (queryParams.sort) {\n if (queryParams.sort === 'oldest')\n params.order = 'ASC';\n else\n params.order = 'DESC';\n }\n\n if (queryParams.bulkActionType) {\n bulkActionTypes = Array.isArray(queryParams.bulkActionType)\n ? queryParams.bulkActionType\n : [queryParams.bulkActionType];\n\n params.type = bulkActionTypes;\n } else {\n // only show supported type in the table by default\n params.type = SUPPORTED_BATCH_JOB_TYPES;\n }\n\n if (queryParams.userType) {\n userTypes = Array.isArray(queryParams.userType)\n ? queryParams.userType\n : [queryParams.userType];\n\n params.dataType = userTypes;\n }\n \n return {\n url: UrlHelper.urlBuilder('{gateway}/v1/batch/jobs', params),\n key: `batch:jobs:${queryParams.cursor}:${queryParams.sort}:${bulkActionTypes.sort().join(':')}:${userTypes.sort().join(':')}`\n };\n },\n\n getJob(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}`,\n key: `job:${id}`\n };\n },\n\n getJobProgress(\n id: string,\n success?: (progress: BatchJobProgress) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/progress`,\n key: `job:${id}:progress`,\n invalidationKeys: `job:${id}:progress`,\n success,\n error\n };\n },\n\n getJobResults<TObject extends BaseObject>(\n id: string,\n status: BatchJobResultStatus,\n cursor?: string,\n success?: (results: BatchJobResultsResponse<TObject>) => void,\n error?: (xhr?: Xhr) => void\n ): Flight.Request {\n const params: HashObject = {\n status\n };\n\n if (cursor)\n params.cursor = cursor;\n\n return {\n url: UrlHelper.urlBuilder(`{gateway}/v1/batch/jobs/${id}/results`, params),\n key: `job:${id}:results:${status}:${cursor}`,\n success,\n error\n };\n },\n\n getYearGroupRolloverStatus(customerId: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/validations/customers/${customerId}/year-group-roll-over`,\n key: 'year:group:rollover:status'\n };\n },\n\n sendJobReports(ids: string[]): Flight.Request {\n return {\n url: '{gateway}/v1/batch/results/export',\n key: `send:job:reports:${ids.sort().join(':')}`,\n type: HttpVerbs.POST,\n data: {\n jobIds: ids\n }\n };\n },\n\n getJobSummary(id: string): Flight.Request {\n return {\n url: `{gateway}/v1/batch/jobs/${id}/summary`,\n key: `job:summary:${id}`\n };\n }\n};","\"use client\";\n\nimport classNames from 'classnames';\nimport * as React from 'react';\nimport { cloneElement } from 'react';\nimport { useBootstrapPrefix } from './ThemeProvider';\nimport { map } from './ElementChildren';\nimport { jsx as _jsx } from \"react/jsx-runtime\";\nconst ROUND_PRECISION = 1000;\n\n/**\n * Validate that children, if any, are instances of `ProgressBar`.\n */\nfunction onlyProgressBar(props, propName, componentName) {\n const children = props[propName];\n if (!children) {\n return null;\n }\n let error = null;\n React.Children.forEach(children, child => {\n if (error) {\n return;\n }\n\n /**\n * Compare types in a way that works with libraries that patch and proxy\n * components like react-hot-loader.\n *\n * see https://github.com/gaearon/react-hot-loader#checking-element-types\n */\n // eslint-disable-next-line @typescript-eslint/no-use-before-define\n const element = /*#__PURE__*/_jsx(ProgressBar, {});\n if (child.type === element.type) return;\n const childType = child.type;\n const childIdentifier = /*#__PURE__*/React.isValidElement(child) ? childType.displayName || childType.name || childType : child;\n error = new Error(`Children of ${componentName} can contain only ProgressBar ` + `components. Found ${childIdentifier}.`);\n });\n return error;\n}\nfunction getPercentage(now, min, max) {\n const percentage = (now - min) / (max - min) * 100;\n return Math.round(percentage * ROUND_PRECISION) / ROUND_PRECISION;\n}\nfunction renderProgressBar({\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n className,\n style,\n variant,\n bsPrefix,\n ...props\n}, ref) {\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n ...props,\n role: \"progressbar\",\n className: classNames(className, `${bsPrefix}-bar`, {\n [`bg-${variant}`]: variant,\n [`${bsPrefix}-bar-animated`]: animated,\n [`${bsPrefix}-bar-striped`]: animated || striped\n }),\n style: {\n width: `${getPercentage(now, min, max)}%`,\n ...style\n },\n \"aria-valuenow\": now,\n \"aria-valuemin\": min,\n \"aria-valuemax\": max,\n children: visuallyHidden ? /*#__PURE__*/_jsx(\"span\", {\n className: \"visually-hidden\",\n children: label\n }) : label\n });\n}\nconst ProgressBar = /*#__PURE__*/React.forwardRef(({\n isChild = false,\n ...rest\n}, ref) => {\n const props = {\n min: 0,\n max: 100,\n animated: false,\n visuallyHidden: false,\n striped: false,\n ...rest\n };\n props.bsPrefix = useBootstrapPrefix(props.bsPrefix, 'progress');\n if (isChild) {\n return renderProgressBar(props, ref);\n }\n const {\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n bsPrefix,\n variant,\n className,\n children,\n ...wrapperProps\n } = props;\n return /*#__PURE__*/_jsx(\"div\", {\n ref: ref,\n ...wrapperProps,\n className: classNames(className, bsPrefix),\n children: children ? map(children, child => /*#__PURE__*/cloneElement(child, {\n isChild: true\n })) : renderProgressBar({\n min,\n now,\n max,\n label,\n visuallyHidden,\n striped,\n animated,\n bsPrefix,\n variant\n }, ref)\n });\n});\nProgressBar.displayName = 'ProgressBar';\nexport default ProgressBar;"],"names":["UserManagerClientContext","namespace","WizardInProgress","props","percentage","Math","floor","totalItemsComplete","totalItems","className","Text","phrase","options","actionName","SvgContainer","svgName","actionVerb","progressVerbPhrase","objectType","MasterType","userType","UserGroup","totalComplete","total","smartCount","ProgressBar","variant","now","WizardSubmitted","POLLING_INTERVAL","MAX_CONSECUTIVE_ERROR_COUNT","WizardPolling","progress","setProgress","consecutiveErrorCount","setConsecutiveErrorCount","timeoutIdRef","navLock","useNavLock","dispatch","pollJob","onPollSuccess","onPollError","currentProgress","status","BatchJobStatus","window","setTimeout","navLockId","unlock","params","jobId","type","keys","request","statusCompleteAppLink","onStatusCompleted","onCompleteJob","current","xhr","clearTimeout","currentVal","processedItems","defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","errorMap","BulkUserUploadStatusPollingView","appLinks","value","currentStep","canAddExistingUsers","onSuccess","onError","userUploadStatus","complete","JobRequests","createJob","data","success","error","url","key","getJobs","queryParams","bulkActionTypes","userTypes","cursor","sort","order","bulkActionType","Array","isArray","dataType","join","getJob","id","getJobProgress","invalidationKeys","getJobResults","getYearGroupRolloverStatus","customerId","sendJobReports","ids","jobIds","getJobSummary","ROUND_PRECISION","getPercentage","min","max","round","renderProgressBar","label","visuallyHidden","striped","animated","style","bsPrefix","ref","role","width","children","isChild","rest","wrapperProps","child","cloneElement","displayName"],"sourceRoot":""}