@clickview/lite 0.55.3-rc.1 → 0.56.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/css/{431-lite-c2c2516537.chunk.css → 2992-lite-3ecbb95727.chunk.css} +1 -0
- package/dist/css/{6054-lite-0b2c72f84f.chunk.css → 3490-lite-74b16654a2.chunk.css} +1 -0
- package/dist/css/{4690-lite-e90867b3fe.chunk.css → 4690-lite-656c11bf50.chunk.css} +1 -1
- package/dist/css/{729-lite-f72fc7b813.chunk.css → 4860-lite-bd73841f9b.chunk.css} +1 -1
- package/dist/css/{1019-lite-bbcf2bff27.chunk.css → 6341-lite-f146164a09.chunk.css} +3 -3
- package/dist/css/{4860-lite-f72fc7b813.chunk.css → 729-lite-bd73841f9b.chunk.css} +1 -1
- package/dist/css/{8046-lite-036035a6f0.chunk.css → 8046-lite-319bb5a9c1.chunk.css} +1 -1
- package/dist/css/{6596-lite-bb28584922.chunk.css → 8784-lite-caf4b7e145.chunk.css} +2 -2
- package/dist/css/{2548-lite-bbcf2bff27.chunk.css → 8945-lite-f146164a09.chunk.css} +3 -3
- package/dist/css/{9010-lite-bb28584922.chunk.css → 9355-lite-caf4b7e145.chunk.css} +2 -2
- package/dist/languages/en.json +1 -1
- package/dist/scripts/{1169-3298aa69ad-lite.chunk.js → 1169-e4773094dc-lite.chunk.js} +2 -2
- package/dist/scripts/{1169-3298aa69ad-lite.chunk.js.map → 1169-e4773094dc-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1379-ca519ec56b-lite.chunk.js → 1379-172a429399-lite.chunk.js} +3 -3
- package/dist/scripts/{1379-ca519ec56b-lite.chunk.js.map → 1379-172a429399-lite.chunk.js.map} +1 -1
- package/dist/scripts/{184-37af6c4675-lite.chunk.js → 184-e1311aa677-lite.chunk.js} +2 -2
- package/dist/scripts/184-e1311aa677-lite.chunk.js.map +1 -0
- package/dist/scripts/2215-a511f6f54c-lite.chunk.js +2 -0
- package/dist/scripts/2215-a511f6f54c-lite.chunk.js.map +1 -0
- package/dist/scripts/2992-c5bec5b43f-lite.chunk.js +2 -0
- package/dist/scripts/2992-c5bec5b43f-lite.chunk.js.map +1 -0
- package/dist/scripts/3490-4f3b9b1d07-lite.chunk.js +2 -0
- package/dist/scripts/3490-4f3b9b1d07-lite.chunk.js.map +1 -0
- package/dist/scripts/4013-700c541143-lite.chunk.js +3 -0
- package/dist/scripts/4013-700c541143-lite.chunk.js.map +1 -0
- package/dist/scripts/{4554-2192c26ee9-lite.chunk.js → 4554-7367f19919-lite.chunk.js} +2 -2
- package/dist/scripts/4554-7367f19919-lite.chunk.js.map +1 -0
- package/dist/scripts/4690-4abacf2ea2-lite.chunk.js +2 -0
- package/dist/scripts/4690-4abacf2ea2-lite.chunk.js.map +1 -0
- package/dist/scripts/{5220-07af32c6ce-lite.chunk.js → 5220-04f2f3bb42-lite.chunk.js} +3 -3
- package/dist/scripts/5220-04f2f3bb42-lite.chunk.js.map +1 -0
- package/dist/scripts/5936-0d3b5a9a2f-lite.chunk.js +2 -0
- package/dist/scripts/5936-0d3b5a9a2f-lite.chunk.js.map +1 -0
- package/dist/scripts/{624-09b51a9d32-lite.chunk.js → 624-2c9ac733ba-lite.chunk.js} +3 -3
- package/dist/scripts/{624-09b51a9d32-lite.chunk.js.map → 624-2c9ac733ba-lite.chunk.js.map} +1 -1
- package/dist/scripts/6262-ce32d35813-lite.chunk.js +2 -0
- package/dist/scripts/{640-c3ae02d0a7-lite.chunk.js.map → 6262-ce32d35813-lite.chunk.js.map} +1 -1
- package/dist/scripts/{2548-c48b8d3e3c-lite.chunk.js → 6341-f07132fa7c-lite.chunk.js} +2 -2
- package/dist/scripts/{2548-c48b8d3e3c-lite.chunk.js.map → 6341-f07132fa7c-lite.chunk.js.map} +1 -1
- package/dist/scripts/7076-748eef1eba-lite.chunk.js +3 -0
- package/dist/scripts/7076-748eef1eba-lite.chunk.js.map +1 -0
- package/dist/scripts/{7288-c11287ecc7-lite.chunk.js → 7288-f9ef507dd3-lite.chunk.js} +2 -2
- package/dist/scripts/7288-f9ef507dd3-lite.chunk.js.map +1 -0
- package/dist/scripts/{729-594be12089-lite.chunk.js → 729-10f6b0cef3-lite.chunk.js} +2 -2
- package/dist/scripts/{729-594be12089-lite.chunk.js.map → 729-10f6b0cef3-lite.chunk.js.map} +1 -1
- package/dist/scripts/7895-6b9c09a1e1-lite.chunk.js +2 -0
- package/dist/scripts/7895-6b9c09a1e1-lite.chunk.js.map +1 -0
- package/dist/scripts/8046-485ecb0ed7-lite.chunk.js +2 -0
- package/dist/scripts/8046-485ecb0ed7-lite.chunk.js.map +1 -0
- package/dist/scripts/8252-146bee4416-lite.chunk.js +2 -0
- package/dist/scripts/8252-146bee4416-lite.chunk.js.map +1 -0
- package/dist/scripts/8784-d6862c97bc-lite.chunk.js +2 -0
- package/dist/scripts/{6596-aa83b99b19-lite.chunk.js.map → 8784-d6862c97bc-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1019-8f977b5095-lite.chunk.js → 8945-3ea21e765e-lite.chunk.js} +2 -2
- package/dist/scripts/{1019-8f977b5095-lite.chunk.js.map → 8945-3ea21e765e-lite.chunk.js.map} +1 -1
- package/dist/scripts/9355-44d72e25e0-lite.chunk.js +2 -0
- package/dist/scripts/{9010-fe4907051e-lite.chunk.js.map → 9355-44d72e25e0-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9395-e1a02b01ce-lite.chunk.js → 9395-e07cb08942-lite.chunk.js} +3 -3
- package/dist/scripts/{9395-e1a02b01ce-lite.chunk.js.map → 9395-e07cb08942-lite.chunk.js.map} +1 -1
- package/dist/scripts/{9478-13da35c4ee-lite.chunk.js → 9478-250b1e9dcf-lite.chunk.js} +3 -3
- package/dist/scripts/{9478-13da35c4ee-lite.chunk.js.map → 9478-250b1e9dcf-lite.chunk.js.map} +1 -1
- package/dist/scripts/{953-225db845ab-lite.chunk.js → 953-e3f732e20e-lite.chunk.js} +3 -3
- package/dist/scripts/{953-225db845ab-lite.chunk.js.map → 953-e3f732e20e-lite.chunk.js.map} +1 -1
- package/dist/scripts/9569-c6292540d7-lite.chunk.js +2 -0
- package/dist/scripts/9569-c6292540d7-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-360989040d.min.js → bundle-f1c26ac44d.min.js} +3 -3
- package/dist/scripts/bundle-f1c26ac44d.min.js.map +1 -0
- package/package.json +1 -1
- package/dist/scripts/1753-6aa1c10a83-lite.chunk.js +0 -2
- package/dist/scripts/1753-6aa1c10a83-lite.chunk.js.map +0 -1
- package/dist/scripts/184-37af6c4675-lite.chunk.js.map +0 -1
- package/dist/scripts/2142-d6e297d5a7-lite.chunk.js +0 -2
- package/dist/scripts/2142-d6e297d5a7-lite.chunk.js.map +0 -1
- package/dist/scripts/4013-7b878e3212-lite.chunk.js +0 -3
- package/dist/scripts/4013-7b878e3212-lite.chunk.js.map +0 -1
- package/dist/scripts/431-0487ecd6e4-lite.chunk.js +0 -2
- package/dist/scripts/431-0487ecd6e4-lite.chunk.js.map +0 -1
- package/dist/scripts/4554-2192c26ee9-lite.chunk.js.map +0 -1
- package/dist/scripts/4690-ab20eb70b5-lite.chunk.js +0 -2
- package/dist/scripts/4690-ab20eb70b5-lite.chunk.js.map +0 -1
- package/dist/scripts/5220-07af32c6ce-lite.chunk.js.map +0 -1
- package/dist/scripts/5936-13efc0f166-lite.chunk.js +0 -2
- package/dist/scripts/5936-13efc0f166-lite.chunk.js.map +0 -1
- package/dist/scripts/6054-d3677cdee9-lite.chunk.js +0 -2
- package/dist/scripts/6054-d3677cdee9-lite.chunk.js.map +0 -1
- package/dist/scripts/640-c3ae02d0a7-lite.chunk.js +0 -2
- package/dist/scripts/6596-aa83b99b19-lite.chunk.js +0 -2
- package/dist/scripts/696-2d01721d18-lite.chunk.js +0 -2
- package/dist/scripts/696-2d01721d18-lite.chunk.js.map +0 -1
- package/dist/scripts/7076-ec18ce09c9-lite.chunk.js +0 -3
- package/dist/scripts/7076-ec18ce09c9-lite.chunk.js.map +0 -1
- package/dist/scripts/7288-c11287ecc7-lite.chunk.js.map +0 -1
- package/dist/scripts/7895-78f20c123f-lite.chunk.js +0 -2
- package/dist/scripts/7895-78f20c123f-lite.chunk.js.map +0 -1
- package/dist/scripts/8046-62f4cbb4d1-lite.chunk.js +0 -2
- package/dist/scripts/8046-62f4cbb4d1-lite.chunk.js.map +0 -1
- package/dist/scripts/9010-fe4907051e-lite.chunk.js +0 -2
- package/dist/scripts/bundle-360989040d.min.js.map +0 -1
- /package/dist/css/{640-lite-45164266aa.chunk.css → 6262-lite-45164266aa.chunk.css} +0 -0
- /package/dist/scripts/{1379-ca519ec56b-lite.chunk.js.LICENSE.txt → 1379-172a429399-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{4013-7b878e3212-lite.chunk.js.LICENSE.txt → 4013-700c541143-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5220-07af32c6ce-lite.chunk.js.LICENSE.txt → 5220-04f2f3bb42-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{624-09b51a9d32-lite.chunk.js.LICENSE.txt → 624-2c9ac733ba-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{7076-ec18ce09c9-lite.chunk.js.LICENSE.txt → 7076-748eef1eba-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9395-e1a02b01ce-lite.chunk.js.LICENSE.txt → 9395-e07cb08942-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{9478-13da35c4ee-lite.chunk.js.LICENSE.txt → 9478-250b1e9dcf-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{953-225db845ab-lite.chunk.js.LICENSE.txt → 953-e3f732e20e-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-360989040d.min.js.LICENSE.txt → bundle-f1c26ac44d.min.js.LICENSE.txt} +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/640-c3ae02d0a7-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/forms/form-buttons/FormButtons.tsx","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/flight-requests/FileGeneratorRequests.ts","file:///app/packages/libs/shared/src/utils/FormHelper.ts","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/projects/lite/src/apps/settings/utils/LibraryHelper.ts","file:///app/packages/projects/lite/src/apps/settings/views/export-libraries/export-libraries.scss","file:///app/packages/projects/lite/src/apps/settings/views/export-libraries/ExportLibrariesForm.tsx","file:///app/packages/projects/lite/src/apps/settings/views/export-libraries/ExportLibrariesView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 64;\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon } = props;\n return (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink} ref={ref}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n );\n});\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>();\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 4 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} />;\n const second = length > 2 ? <BreadcrumbItem breadcrumb={breadcrumbs[1]} /> : <></>;\n const secondLast = length > 3 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} /> : <></>;\n const last = length > 1 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} /> : <></>;\n const rest = breadcrumbs.slice(2, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {second}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n />\n ))\n }\n {secondLast}\n {last}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nconst namespace = 'shared.formButtons';\n\ninterface FormButtonsProps {\n isNew?: boolean;\n submitText?: string;\n variant?: ButtonProps['variant'];\n size?: FormSize;\n className?: string;\n}\n\nexport function FormButtons<Values extends HashObject>(props: FormButtonsProps): JSX.Element {\n const formikProps = useFormikContext<Values>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <SpinnerButton\n variant={props.variant || 'primary'}\n type='submit'\n disabled={!canSubmit}\n size={props.size}\n className={props.className ? props.className : ''}\n showSpinner={formikProps.isSubmitting}\n >\n {props.submitText\n ? <>{props.submitText}</>\n : <Text namespace={namespace} phrase={props.isNew ? 'create' : 'save'} />}\n </SpinnerButton>\n );\n}\n","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> </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'> <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} aria-errormessage={`${fieldProps.name}Error`} />\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 id={`${fieldProps.name}Error`} type='invalid' role='status'>{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 { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nimport { FileGeneratorRequest } from '../interfaces/requests/FileGeneratorRequest';\n\n\nexport const FileGeneratorRequests = {\n requestExport(data: FileGeneratorRequest): Flight.Request {\n return {\n url: '/api/domain/v2/export',\n key: 'request:export',\n type: HttpVerbs.POST,\n data,\n normalize: false\n };\n }\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};","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nconst namespace = 'settings.settingsLayout';\n\n/**\n * Checks if the current user has permission to access the settings module\n */\nexport const useCanAccessSettings = (requiredPermissions: PermissionName | PermissionName[]): boolean => {\n const { hasPermissions } = usePermissions();\n const settingsGroups = useGetSettingsGroups();\n\n /**\n * TODO: Update all settings pages to pasas required permissions, because checking the \n * `useGetSettingsGroups()` values clearly doesnt work for settings pages with multiple\n * applinks inside of them. - Sha\n */\n if (requiredPermissions)\n return hasPermissions(requiredPermissions);\n\n const currentRoute = Core.AppLinkHelper.getCurrentAppLink();\n\n /**\n * Allows us to have popups sitting in other locations be used\n * by our settings pages. For example the manage video access popup\n * in the \"videos with restricted access\" page - Sha\n */\n if (currentRoute.application !== AppChannels.SETTINGS)\n return true;\n\n return settingsGroups.some(group => {\n return group.modules.some(settingsModule => {\n if ('appLink' in settingsModule) {\n return settingsModule.appLink.action === currentRoute.action;\n }\n\n return false;\n });\n });\n};\n\ninterface SettingsLayoutProps {\n heading: string;\n breadcrumbs: string[];\n description?: string;\n requiredPermissions?: PermissionName | PermissionName[];\n headingButton?: () => JSX.Element;\n}\n\nexport function SettingsLayout(props: React.PropsWithChildren<SettingsLayoutProps>): JSX.Element {\n const canAccess = useCanAccessSettings(props.requiredPermissions);\n\n React.useEffect(() => {\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [canAccess]);\n\n if (!canAccess)\n return <></>;\n\n const breadcrumbs = props.breadcrumbs.map((name, i) => ({\n name,\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n },\n active: i === props.breadcrumbs.length - 1\n }));\n\n return (\n <div className='px-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h1 className='h2'>{props.heading}</h1>\n {props.headingButton?.()}\n </div>\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }\n },\n ...breadcrumbs\n ]}\n />\n </div>\n {props.description &&\n <>\n <p>{props.description}</p>\n <hr />\n </>\n }\n\n {props.children}\n </div>\n );\n}","import { Library } from 'libs/shared/interfaces';\n\ntype OrderedLibraries = {\n primary?: Library[];\n secondary?: Library[];\n tertiary?: Library[];\n other: Library[];\n}\n\nconst libraryGroupMatches: {[key in keyof OrderedLibraries]: string[]} = {\n primary: [ 'primary', 'elementary' ],\n secondary: [ 'secondary', 'middle' ],\n tertiary: [ 'high', 'tertiary', 'university', 'fe/he' ],\n other: [ 'movies', 'tv', 'distributor' ]\n};\n\nexport const LibraryHelper = {\n orderLibraries(libraries: Library[]): Library[] {\n const orderedLibraries = libraries.reduce((sorted, current) => {\n const matched = Object.keys(libraryGroupMatches).some(key => {\n const libraryType = key as keyof OrderedLibraries;\n const matches = libraryGroupMatches[libraryType].some(\n matcher => current.name.toLowerCase().includes(matcher.toLowerCase())\n );\n\n if (!matches) return false;\n\n const existing = sorted[libraryType] ?? [];\n sorted[libraryType] = [ ...existing, current ];\n return true;\n });\n \n // If the library name dint match any of our libraryGroupMatches\n // we will push it to other library group\n if (!matched) {\n sorted.other.push(current);\n }\n \n return sorted;\n }, {\n other: []\n } as OrderedLibraries);\n\n return Object.keys(libraryGroupMatches).reduce((libraries, current) => {\n const libraryType = current as keyof OrderedLibraries;\n if (orderedLibraries[libraryType]) {\n libraries.push(...orderedLibraries[libraryType]);\n }\n return libraries;\n }, [] as Library[]);\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"formatSelect\":\"ZLQpe\"};","import React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { Form as FormikForm, useFormikContext } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Library } from 'libs/shared/interfaces';\n\nimport { LibraryHelper } from 'apps/settings/utils/LibraryHelper';\n\nimport styles from './export-libraries.scss';\n\nconst namespace = 'settings.exportLibraries';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst FORMATS = {\n 'csv': 'CSV',\n 'marc-21': 'MARC 21',\n 'marc-21-v2': 'MARC 21 V2',\n 'marc-xml': 'MARC XML'\n};\n\nexport interface ExportLibrariesFormData {\n libraryIds: string[];\n format: string;\n}\n\nexport const ExportLibraryValidationSchema = Yup.object().shape<ExportLibrariesFormData>({\n libraryIds: Yup.array()\n .of(Yup.string())\n .required(() => getPhrase('libraryIdsRequired'))\n .min(1),\n\n format: Yup.string()\n .required(() => getPhrase('formatRequired'))\n});\n\ninterface ExportLibrariesFormProps {\n libraries: Library[];\n}\n\nexport function ExportLibrariesForm(props: ExportLibrariesFormProps): React.ReactElement {\n const formikProps = useFormikContext<ExportLibrariesFormData>();\n\n const libraries = React.useMemo(() => LibraryHelper.orderLibraries(props.libraries), [props.libraries]);\n\n return (\n <FormikForm>\n <Form.Label className='mb-2'>\n <Text namespace={namespace} phrase='selectLibraries' />\n </Form.Label>\n\n {libraries.map((library, key) => {\n const id = `library-${key}`;\n return (\n <FormField\n key={key}\n type='checkbox'\n label={library.name}\n checkboxLabelFontWeight='normal'\n name={id}\n id={id}\n checked={!!formikProps.values.libraryIds.some(l => l.toString() === library.id.toString())}\n onChange={() => {\n const values = [...formikProps.values.libraryIds];\n const index = values.findIndex(l => l.toString() === library.id.toString());\n \n if (index === -1) {\n values.push(library.id);\n } else {\n values.splice(index, 1);\n }\n\n formikProps.setFieldValue('libraryIds', values);\n }}\n />\n );\n })}\n \n {formikProps.errors.libraryIds &&\n <Form.Control.Feedback type='invalid' className='d-block mb-3'>{formikProps.errors.libraryIds}</Form.Control.Feedback>\n }\n <div className={styles.formatSelect}>\n <FormField\n as='select'\n label={getPhrase('exportAs')}\n name='format'\n id='format'\n value={formikProps.values.format || ''}\n >\n <option value=''>{getPhrase('selectAFormat')}</option>\n {Object.entries(FORMATS).map(([ key, name ]) => {\n return (\n <option key={key} value={key}>{name}</option>\n );\n })}\n </FormField>\n </div>\n \n <FormButtons\n variant='dark'\n submitText={getPhrase('export')}\n />\n </FormikForm>\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 } from 'libs/analytics/interfaces';\n\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { FileGeneratorRequests } from 'libs/shared/flight-requests/FileGeneratorRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurrentUser, Library } from 'libs/shared/interfaces';\nimport { FileGeneratorRequest } from 'libs/shared/interfaces/requests/FileGeneratorRequest';\n\nimport { SettingsLayout } from 'apps/settings/components/settings-layout/SettingsLayout';\n\nimport { ExportLibrariesForm, ExportLibrariesFormData, ExportLibraryValidationSchema } from './ExportLibrariesForm';\n\nconst namespace = 'settings.exportLibraries';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst LIBRARY_TYPES = [ 'customLibrary', 'sharedLibrary', 'hostedLibrary' ];\n\nexport function ExportLibrariesView(): React.ReactElement {\n const fetchAsync = Flight.useGetFetchAsync();\n\n const alerts = useAlerts();\n\n /**\n * I'm casting LIBRARY_TYPES to any here intentionally because I don't want to add 'hostedLibrary'\n * to our list of acceptable types. This UI is an exception, but we shouldn't be fetching\n * hosted libraries anywhere else in Lite. - Sha\n */\n const libraries = Flight.useBasicFetch<Library[]>(LibraryRequests.domainLibraries(LIBRARY_TYPES as any));\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n function onSubmit(\n data: ExportLibrariesFormData,\n onDone: (options: FormSubmissionOptions) => void\n ): void {\n const fileGeneratorRequest: FileGeneratorRequest = {\n key: 'lite.library.video.report',\n data: {\n firstName: currentUser.data.givenName,\n email: currentUser.data.email,\n customerId: currentUser.data.customerId,\n formats: [data.format],\n libraryIds: data.libraryIds\n }\n };\n const request = FileGeneratorRequests.requestExport(fileGeneratorRequest);\n fetchAsync(request)\n .then(() => onSuccess(fileGeneratorRequest))\n .catch(() => alerts.error(getPhrase('error')))\n .finally(() => onDone({ reset: true }));\n }\n\n function onSuccess(fileGeneratorRequest: FileGeneratorRequest): void {\n alerts.success(getPhrase('success'));\n\n AnalyticsHelper.logUserAction(fileGeneratorRequest, {\n actionType: UserAction.Export,\n entity: EntityType.FileGeneratorJob,\n location: LocationContext.Settings\n });\n }\n\n if (!libraries.data || !currentUser.data)\n return <></>;\n\n return (\n <SettingsLayout\n heading={getPhrase('heading')}\n breadcrumbs={[getPhrase('heading')]}\n description={getPhrase('info')}\n >\n <FormWrapper<ExportLibrariesFormData>\n onSubmit={onSubmit}\n validationSchema={ExportLibraryValidationSchema}\n initialValues={{ format: '', libraryIds: []}}\n >\n <ExportLibrariesForm libraries={libraries.data} />\n </FormWrapper>\n </SettingsLayout>\n );\n}"],"names":["getPhrase","BreadcrumbItem","props","ref","breadcrumb","name","appLink","active","withBackIcon","className","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","collapse","setCollapse","shouldFocus","setShouldFocus","expandRef","characterLength","reduce","prev","next","current","focus","first","second","secondLast","last","rest","slice","onClick","map","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","namespace","FormButtons","formikProps","canSubmit","variant","type","disabled","showSpinner","isSubmitting","submitText","phrase","isNew","FormCheckbox","label","checkboxLabelClassName","checkboxLabelFontWeight","fieldProps","Form","FieldWrapper","htmlFor","id","checkboxAppLink","checkboxAppLinkText","AppLink","CharacterCounter","field","values","fieldName","limit","children","showLoadingSpinner","setType","resolvedChildren","FunctionHelper","f","ObjectHelper","Spinner","animation","containerClassName","SvgContainer","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","as","title","tooltipPlacement","tooltipSpanHack","Text","maxLength","errorMessage","role","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","options","reset","entries","value","useFormikContextWrapper","FileGeneratorRequests","requestExport","data","url","normalize","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","opts","Array","Math","max","floor","random","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","application","some","group","modules","settingsModule","action","SettingsLayout","canAccess","replace","i","heading","headingButton","description","libraryGroupMatches","primary","secondary","tertiary","other","LibraryHelper","orderLibraries","libraries","orderedLibraries","sorted","libraryType","matcher","toLowerCase","includes","existing","push","LanguageService","FORMATS","ExportLibraryValidationSchema","shape","libraryIds","of","required","min","format","ExportLibrariesForm","library","checked","l","toString","index","findIndex","splice","setFieldValue","LIBRARY_TYPES","ExportLibrariesView","fetchAsync","alerts","LibraryRequests","currentUser","UserRequests","onDone","fileGeneratorRequest","firstName","givenName","email","customerId","formats","request","then","success","AnalyticsHelper","actionType","entity","location","onSuccess","error"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/6262-ce32d35813-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/components/breadcrumbs/Breadcrumbs.tsx","file:///app/packages/libs/shared/src/components/forms/form-buttons/FormButtons.tsx","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/utils/FormHelper.ts","file:///app/packages/libs/shared/src/utils/PartialLoadingHelper.ts","file:///app/packages/projects/lite/src/apps/settings/components/settings-layout/SettingsLayout.tsx","file:///app/packages/libs/shared/src/flight-requests/FileGeneratorRequests.ts","file:///app/packages/projects/lite/src/apps/settings/utils/LibraryHelper.ts","file:///app/packages/projects/lite/src/apps/settings/views/export-libraries/export-libraries.scss","file:///app/packages/projects/lite/src/apps/settings/views/export-libraries/ExportLibrariesForm.tsx","file:///app/packages/projects/lite/src/apps/settings/views/export-libraries/ExportLibrariesView.tsx"],"sourcesContent":["import * as React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Core } from 'libs/common/core';\n\nimport { AppLink } from 'libs/shared/components/app-link/AppLink';\nimport { MediaQueryStrings } from 'libs/shared/enums/MediaQueries';\nimport { useMediaQuery } from 'libs/shared/hooks/UseMediaQuery';\nimport { PartialLoadingHelper } from 'libs/shared/utils/PartialLoadingHelper';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport { SvgContainer, SvgContainerSize } from '../svg-container/SvgContainer';\n\nconst namespace = 'shared.breadcrumbComponent';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst COLLAPSE_CHARACTER_COUNT = 64;\n\nexport interface Breadcrumb {\n name: string;\n appLink?: Core.AppLink;\n active?: boolean;\n}\n\ninterface BreadcrumbItemProps {\n breadcrumb: Breadcrumb;\n withBackIcon?: boolean;\n}\n\nexport const BreadcrumbItem = React.forwardRef((\n props: BreadcrumbItemProps,\n ref: React.ForwardedRef<HTMLElement>\n) => {\n const { breadcrumb: { name, appLink, active }, withBackIcon } = props;\n return (\n <li className={`breadcrumb-item${active ? ' active' : ''}`}>\n {active\n ? <strong>{name}</strong>\n : <AppLink appLink={appLink} ref={ref}>\n {withBackIcon && <SvgContainer svgName={cvSvgLibrary.ChevronLeft} size={SvgContainerSize.Small} />}\n <span className={withBackIcon ? 'ms-2' : ''}>{name}</span>\n </AppLink>\n }\n </li>\n );\n});\n\ninterface BreadcrumbsProps {\n breadcrumbs: Breadcrumb[];\n}\n\nexport const Breadcrumbs = ({ breadcrumbs }: BreadcrumbsProps) => {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n const length = breadcrumbs?.length || 0;\n \n const [ collapse, setCollapse ] = React.useState(false);\n const [ shouldFocus, setShouldFocus ] = React.useState(false);\n const expandRef = React.useRef<HTMLElement>();\n\n React.useEffect(() => {\n const characterLength = breadcrumbs?.reduce((prev, next) => prev + next.name.length, 0) ?? 0;\n\n if (length > 4 && characterLength > COLLAPSE_CHARACTER_COUNT)\n setCollapse(true);\n }, [breadcrumbs?.length]);\n\n /**\n * Focus our first expanded item the first time it appears.\n */\n React.useLayoutEffect(() => {\n if (shouldFocus)\n expandRef.current?.focus();\n }, [ expandRef.current, shouldFocus ]);\n\n function onClickExpand() {\n setCollapse(false);\n setShouldFocus(true);\n }\n\n if (!length || (isMobile && length < 2))\n return <></>;\n\n if (isMobile)\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} withBackIcon />\n </ol>\n </nav>\n );\n\n const first = <BreadcrumbItem breadcrumb={breadcrumbs[0]} />;\n const second = length > 2 ? <BreadcrumbItem breadcrumb={breadcrumbs[1]} /> : <></>;\n const secondLast = length > 3 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 2]} /> : <></>;\n const last = length > 1 ? <BreadcrumbItem breadcrumb={breadcrumbs[length - 1]} /> : <></>;\n const rest = breadcrumbs.slice(2, length - 2);\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {first}\n {second}\n {collapse ?\n <li className='breadcrumb-item'>\n <button\n className='btn-link'\n onClick={onClickExpand}\n aria-label={getPhrase('expand')}\n >\n ...\n </button>\n </li> :\n rest.map((breadcrumb, idx) => (\n <BreadcrumbItem\n key={idx}\n breadcrumb={breadcrumb}\n ref={idx === 0 ? expandRef : null}\n />\n ))\n }\n {secondLast}\n {last}\n </ol>\n </nav>\n );\n};\n\nexport const PartialBreadcrumbs = React.memo(function({ numItems = 3 }: { numItems?: number; }) {\n const isMobile = useMediaQuery(MediaQueryStrings.XS);\n\n if (isMobile) {\n return (\n <div className='partial-loading-background' style={{ height: '1.3125rem', width: '6rem' }} />\n );\n }\n\n return (\n <nav aria-label='breadcrumb'>\n <ol className='breadcrumb m-0 p-0'>\n {PartialLoadingHelper.getPartialLoadingItems({ numItems }).map(({ width }, idx) => (\n <li key={idx} className='breadcrumb-item'>\n <span className='d-inline-block partial-loading-background' style={{ width }} dangerouslySetInnerHTML={{ __html: ' ' }} />\n </li>\n ))}\n </ol>\n </nav>\n );\n});","import * as React from 'react';\nimport { ButtonProps } from 'react-bootstrap';\nimport { useFormikContext } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormSize } from 'libs/shared/components/forms/form-field/FormField';\nimport { SpinnerButton } from 'libs/shared/components/spinner-button/SpinnerButton';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { useCanSubmitForm } from 'libs/shared/hooks/UseCanSubmitForm';\n\nconst namespace = 'shared.formButtons';\n\ninterface FormButtonsProps {\n isNew?: boolean;\n submitText?: string;\n variant?: ButtonProps['variant'];\n size?: FormSize;\n className?: string;\n}\n\nexport function FormButtons<Values extends HashObject>(props: FormButtonsProps): JSX.Element {\n const formikProps = useFormikContext<Values>();\n\n const canSubmit = useCanSubmitForm(formikProps);\n\n return (\n <SpinnerButton\n variant={props.variant || 'primary'}\n type='submit'\n disabled={!canSubmit}\n size={props.size}\n className={props.className ? props.className : ''}\n showSpinner={formikProps.isSubmitting}\n >\n {props.submitText\n ? <>{props.submitText}</>\n : <Text namespace={namespace} phrase={props.isNew ? 'create' : 'save'} />}\n </SpinnerButton>\n );\n}\n","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> </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'> <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} aria-errormessage={`${fieldProps.name}Error`} />\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 id={`${fieldProps.name}Error`} type='invalid' role='status'>{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 { 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};","const DEFAULT_PARTIAL_LOADING_OPTIONS: PartialLoadingOptions = {\n numItems: 5,\n minWidth: 50, // px\n maxWidth: 100 // px\n};\n\nexport interface PartialLoadingOptions {\n numItems?: number;\n minWidth?: number;\n maxWidth?: number;\n}\n\ninterface PartialLoadingItem {\n width: string;\n}\n\nexport const PartialLoadingHelper = {\n getPartialLoadingItems(options: PartialLoadingOptions = {}): PartialLoadingItem[] {\n const opts = {\n ...DEFAULT_PARTIAL_LOADING_OPTIONS,\n ...options\n };\n\n const getRandomFilterWidth = () => Math.max(Math.floor(Math.random() * opts.maxWidth), opts.minWidth);\n\n return [...Array(opts.numItems)].map(() => ({ width: `${getRandomFilterWidth()}px` }));\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { Breadcrumbs } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\n\nimport { useGetSettingsGroups } from 'apps/settings/hooks/useGetSettingsGroups';\n\nconst namespace = 'settings.settingsLayout';\n\n/**\n * Checks if the current user has permission to access the settings module\n */\nexport const useCanAccessSettings = (requiredPermissions: PermissionName | PermissionName[]): boolean => {\n const { hasPermissions } = usePermissions();\n const settingsGroups = useGetSettingsGroups();\n\n /**\n * TODO: Update all settings pages to pasas required permissions, because checking the \n * `useGetSettingsGroups()` values clearly doesnt work for settings pages with multiple\n * applinks inside of them. - Sha\n */\n if (requiredPermissions)\n return hasPermissions(requiredPermissions);\n\n const currentRoute = Core.AppLinkHelper.getCurrentAppLink();\n\n /**\n * Allows us to have popups sitting in other locations be used\n * by our settings pages. For example the manage video access popup\n * in the \"videos with restricted access\" page - Sha\n */\n if (currentRoute.application !== AppChannels.SETTINGS)\n return true;\n\n return settingsGroups.some(group => {\n return group.modules.some(settingsModule => {\n if ('appLink' in settingsModule) {\n return settingsModule.appLink.action === currentRoute.action;\n }\n\n return false;\n });\n });\n};\n\ninterface SettingsLayoutProps {\n heading: string;\n breadcrumbs: string[];\n description?: string;\n requiredPermissions?: PermissionName | PermissionName[];\n headingButton?: () => JSX.Element;\n}\n\nexport function SettingsLayout(props: React.PropsWithChildren<SettingsLayoutProps>): JSX.Element {\n const canAccess = useCanAccessSettings(props.requiredPermissions);\n\n React.useEffect(() => {\n if (!canAccess) {\n Core.AppLinkHelper.trigger({\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }, { replace: true });\n }\n }, [canAccess]);\n\n if (!canAccess)\n return <></>;\n\n const breadcrumbs = props.breadcrumbs.map((name, i) => ({\n name,\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n },\n active: i === props.breadcrumbs.length - 1\n }));\n\n return (\n <div className='px-3'>\n <div className='d-flex align-items-center justify-content-between'>\n <h1 className='h2'>{props.heading}</h1>\n {props.headingButton?.()}\n </div>\n <div className='pb-3'>\n <Breadcrumbs\n breadcrumbs={[\n {\n name: LanguageService.getPhrase(namespace, 'settingsBreadcrumb'),\n appLink: {\n application: AppChannels.SETTINGS,\n action: Actions.Settings.HOME\n }\n },\n ...breadcrumbs\n ]}\n />\n </div>\n {props.description &&\n <>\n <p>{props.description}</p>\n <hr />\n </>\n }\n\n {props.children}\n </div>\n );\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/flight';\n\nimport { FileGeneratorRequest } from '../interfaces/requests/FileGeneratorRequest';\n\n\nexport const FileGeneratorRequests = {\n requestExport(data: FileGeneratorRequest): Flight.Request {\n return {\n url: '/api/domain/v2/export',\n key: 'request:export',\n type: HttpVerbs.POST,\n data,\n normalize: false\n };\n }\n};","import { Library } from 'libs/shared/interfaces';\n\ntype OrderedLibraries = {\n primary?: Library[];\n secondary?: Library[];\n tertiary?: Library[];\n other: Library[];\n}\n\nconst libraryGroupMatches: {[key in keyof OrderedLibraries]: string[]} = {\n primary: [ 'primary', 'elementary' ],\n secondary: [ 'secondary', 'middle' ],\n tertiary: [ 'high', 'tertiary', 'university', 'fe/he' ],\n other: [ 'movies', 'tv', 'distributor' ]\n};\n\nexport const LibraryHelper = {\n orderLibraries(libraries: Library[]): Library[] {\n const orderedLibraries = libraries.reduce((sorted, current) => {\n const matched = Object.keys(libraryGroupMatches).some(key => {\n const libraryType = key as keyof OrderedLibraries;\n const matches = libraryGroupMatches[libraryType].some(\n matcher => current.name.toLowerCase().includes(matcher.toLowerCase())\n );\n\n if (!matches) return false;\n\n const existing = sorted[libraryType] ?? [];\n sorted[libraryType] = [ ...existing, current ];\n return true;\n });\n \n // If the library name dint match any of our libraryGroupMatches\n // we will push it to other library group\n if (!matched) {\n sorted.other.push(current);\n }\n \n return sorted;\n }, {\n other: []\n } as OrderedLibraries);\n\n return Object.keys(libraryGroupMatches).reduce((libraries, current) => {\n const libraryType = current as keyof OrderedLibraries;\n if (orderedLibraries[libraryType]) {\n libraries.push(...orderedLibraries[libraryType]);\n }\n return libraries;\n }, [] as Library[]);\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"formatSelect\":\"ZLQpe\"};","import React from 'react';\nimport { Form } from 'react-bootstrap';\nimport { Form as FormikForm, useFormikContext } from 'formik';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FormButtons } from 'libs/shared/components/forms/form-buttons/FormButtons';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { Library } from 'libs/shared/interfaces';\n\nimport { LibraryHelper } from 'apps/settings/utils/LibraryHelper';\n\nimport styles from './export-libraries.scss';\n\nconst namespace = 'settings.exportLibraries';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst FORMATS = {\n 'csv': 'CSV',\n 'marc-21': 'MARC 21',\n 'marc-21-v2': 'MARC 21 V2',\n 'marc-xml': 'MARC XML'\n};\n\nexport interface ExportLibrariesFormData {\n libraryIds: string[];\n format: string;\n}\n\nexport const ExportLibraryValidationSchema = Yup.object().shape<ExportLibrariesFormData>({\n libraryIds: Yup.array()\n .of(Yup.string())\n .required(() => getPhrase('libraryIdsRequired'))\n .min(1),\n\n format: Yup.string()\n .required(() => getPhrase('formatRequired'))\n});\n\ninterface ExportLibrariesFormProps {\n libraries: Library[];\n}\n\nexport function ExportLibrariesForm(props: ExportLibrariesFormProps): React.ReactElement {\n const formikProps = useFormikContext<ExportLibrariesFormData>();\n\n const libraries = React.useMemo(() => LibraryHelper.orderLibraries(props.libraries), [props.libraries]);\n\n return (\n <FormikForm>\n <Form.Label className='mb-2'>\n <Text namespace={namespace} phrase='selectLibraries' />\n </Form.Label>\n\n {libraries.map((library, key) => {\n const id = `library-${key}`;\n return (\n <FormField\n key={key}\n type='checkbox'\n label={library.name}\n checkboxLabelFontWeight='normal'\n name={id}\n id={id}\n checked={!!formikProps.values.libraryIds.some(l => l.toString() === library.id.toString())}\n onChange={() => {\n const values = [...formikProps.values.libraryIds];\n const index = values.findIndex(l => l.toString() === library.id.toString());\n \n if (index === -1) {\n values.push(library.id);\n } else {\n values.splice(index, 1);\n }\n\n formikProps.setFieldValue('libraryIds', values);\n }}\n />\n );\n })}\n \n {formikProps.errors.libraryIds &&\n <Form.Control.Feedback type='invalid' className='d-block mb-3'>{formikProps.errors.libraryIds}</Form.Control.Feedback>\n }\n <div className={styles.formatSelect}>\n <FormField\n as='select'\n label={getPhrase('exportAs')}\n name='format'\n id='format'\n value={formikProps.values.format || ''}\n >\n <option value=''>{getPhrase('selectAFormat')}</option>\n {Object.entries(FORMATS).map(([ key, name ]) => {\n return (\n <option key={key} value={key}>{name}</option>\n );\n })}\n </FormField>\n </div>\n \n <FormButtons\n variant='dark'\n submitText={getPhrase('export')}\n />\n </FormikForm>\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 } from 'libs/analytics/interfaces';\n\nimport { FormSubmissionOptions, FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { FileGeneratorRequests } from 'libs/shared/flight-requests/FileGeneratorRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { CurrentUser, Library } from 'libs/shared/interfaces';\nimport { FileGeneratorRequest } from 'libs/shared/interfaces/requests/FileGeneratorRequest';\n\nimport { SettingsLayout } from 'apps/settings/components/settings-layout/SettingsLayout';\n\nimport { ExportLibrariesForm, ExportLibrariesFormData, ExportLibraryValidationSchema } from './ExportLibrariesForm';\n\nconst namespace = 'settings.exportLibraries';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst LIBRARY_TYPES = [ 'customLibrary', 'sharedLibrary', 'hostedLibrary' ];\n\nexport function ExportLibrariesView(): React.ReactElement {\n const fetchAsync = Flight.useGetFetchAsync();\n\n const alerts = useAlerts();\n\n /**\n * I'm casting LIBRARY_TYPES to any here intentionally because I don't want to add 'hostedLibrary'\n * to our list of acceptable types. This UI is an exception, but we shouldn't be fetching\n * hosted libraries anywhere else in Lite. - Sha\n */\n const libraries = Flight.useBasicFetch<Library[]>(LibraryRequests.domainLibraries(LIBRARY_TYPES as any));\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n\n function onSubmit(\n data: ExportLibrariesFormData,\n onDone: (options: FormSubmissionOptions) => void\n ): void {\n const fileGeneratorRequest: FileGeneratorRequest = {\n key: 'lite.library.video.report',\n data: {\n firstName: currentUser.data.givenName,\n email: currentUser.data.email,\n customerId: currentUser.data.customerId,\n formats: [data.format],\n libraryIds: data.libraryIds\n }\n };\n const request = FileGeneratorRequests.requestExport(fileGeneratorRequest);\n fetchAsync(request)\n .then(() => onSuccess(fileGeneratorRequest))\n .catch(() => alerts.error(getPhrase('error')))\n .finally(() => onDone({ reset: true }));\n }\n\n function onSuccess(fileGeneratorRequest: FileGeneratorRequest): void {\n alerts.success(getPhrase('success'));\n\n AnalyticsHelper.logUserAction(fileGeneratorRequest, {\n actionType: UserAction.Export,\n entity: EntityType.FileGeneratorJob,\n location: LocationContext.Settings\n });\n }\n\n if (!libraries.data || !currentUser.data)\n return <></>;\n\n return (\n <SettingsLayout\n heading={getPhrase('heading')}\n breadcrumbs={[getPhrase('heading')]}\n description={getPhrase('info')}\n >\n <FormWrapper<ExportLibrariesFormData>\n onSubmit={onSubmit}\n validationSchema={ExportLibraryValidationSchema}\n initialValues={{ format: '', libraryIds: []}}\n >\n <ExportLibrariesForm libraries={libraries.data} />\n </FormWrapper>\n </SettingsLayout>\n );\n}"],"names":["getPhrase","BreadcrumbItem","props","ref","breadcrumb","name","appLink","active","withBackIcon","className","svgName","size","S","Breadcrumbs","breadcrumbs","isMobile","length","collapse","setCollapse","shouldFocus","setShouldFocus","expandRef","characterLength","reduce","prev","next","current","focus","first","second","secondLast","last","rest","slice","onClick","map","idx","key","PartialBreadcrumbs","numItems","style","height","width","dangerouslySetInnerHTML","__html","namespace","FormButtons","formikProps","canSubmit","variant","type","disabled","showSpinner","isSubmitting","submitText","phrase","isNew","FormCheckbox","label","checkboxLabelClassName","checkboxLabelFontWeight","fieldProps","Form","FieldWrapper","htmlFor","id","checkboxAppLink","checkboxAppLinkText","AppLink","CharacterCounter","field","values","fieldName","limit","children","showLoadingSpinner","setType","resolvedChildren","FunctionHelper","f","ObjectHelper","Spinner","animation","containerClassName","SvgContainer","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","as","title","tooltipPlacement","tooltipSpanHack","Text","maxLength","errorMessage","role","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","options","reset","entries","value","useFormikContextWrapper","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","DEFAULT_PARTIAL_LOADING_OPTIONS","minWidth","maxWidth","PartialLoadingHelper","getPartialLoadingItems","opts","Array","Math","max","floor","random","useCanAccessSettings","requiredPermissions","hasPermissions","settingsGroups","currentRoute","application","some","group","modules","settingsModule","action","SettingsLayout","canAccess","replace","i","heading","headingButton","description","FileGeneratorRequests","requestExport","data","url","HttpVerbs","normalize","libraryGroupMatches","primary","secondary","tertiary","other","LibraryHelper","orderLibraries","libraries","orderedLibraries","sorted","libraryType","matcher","toLowerCase","includes","existing","push","LanguageService","FORMATS","ExportLibraryValidationSchema","shape","libraryIds","of","required","min","format","ExportLibrariesForm","library","checked","l","toString","index","findIndex","splice","setFieldValue","LIBRARY_TYPES","ExportLibrariesView","fetchAsync","alerts","LibraryRequests","currentUser","UserRequests","onDone","fileGeneratorRequest","firstName","givenName","email","customerId","formats","request","then","success","AnalyticsHelper","actionType","entity","location","onSuccess","error"],"sourceRoot":""}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[
|
|
2
|
-
//# sourceMappingURL=
|
|
1
|
+
"use strict";(self.webpackChunk_clickview_lite=self.webpackChunk_clickview_lite||[]).push([[6341],{94644:(e,t,a)=>{a.d(t,{r:()=>c});var n=a(50242),r=a(81886),i=a(67058),o=a(14553),s=a(49267),d=a(49075),u={notFound:i.d,forbidden:{rating:o.q,yearLevel:o.q,region:s.a,privacy:o.q},badRequest:d._};function c(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{};if(e){var i;i="number"==typeof e?e:e.status;var o=Object.assign(Object.assign({},u),t);i&&r.Q.Ry.isStatusCodeError(i)&&(i!==n.o.NotFound?i!==n.o.Forbidden?a.badRequest||r.Q.Ry.throw(new o.badRequest):a.forbidden||r.Q.Ry.throw(new o.forbidden.privacy):a.notFound||r.Q.Ry.throw(new o.notFound))}}},91286:(e,t,a)=>{a.d(t,{v:()=>o});var n=a(32735),r=a(94644);function i(e){return e.map((function(e){return e.statusCode})).join(":")}function o(e,t,a){var o=Array.isArray(e)?e:[e];(0,n.useEffect)((function(){o.forEach((function(e){(0,r.r)(e.statusCode,t,a)}))}),[i(o),t,a])}},63719:(e,t,a)=>{a.d(t,{h:()=>s});var n=a(32735),r=a(77316);function i(e,t){if(e){if("string"==typeof e)return o(e,t);var a={}.toString.call(e).slice(8,-1);return"Object"===a&&e.constructor&&(a=e.constructor.name),"Map"===a||"Set"===a?Array.from(e):"Arguments"===a||/^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(a)?o(e,t):void 0}}function o(e,t){(null==t||t>e.length)&&(t=e.length);for(var a=0,n=Array(t);a<t;a++)n[a]=e[a];return n}function s(e){var t,a,s=(t=n.useMemo((function(){return r.p.getBuilder()}),[]),a=2,function(e){if(Array.isArray(e))return e}(t)||function(e,t){var a=null==e?null:"undefined"!=typeof Symbol&&e[Symbol.iterator]||e["@@iterator"];if(null!=a){var n,r,i,o,s=[],d=!0,u=!1;try{if(i=(a=a.call(e)).next,0===t){if(Object(a)!==a)return;d=!1}else for(;!(d=(n=i.call(a)).done)&&(s.push(n.value),s.length!==t);d=!0);}catch(e){u=!0,r=e}finally{try{if(!d&&null!=a.return&&(o=a.return(),Object(o)!==o))return}finally{if(u)throw r}}return s}}(t,a)||i(t,a)||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.")}()),d=s[0],u=(0,s[1])(d);return u&&e?[].concat(function(e){return function(e){if(Array.isArray(e))return o(e)}(e)||function(e){if("undefined"!=typeof Symbol&&null!=e[Symbol.iterator]||null!=e["@@iterator"])return Array.from(e)}(e)||i(e)||function(){throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}()}(u),[Object.assign(Object.assign({},e),{active:!0})]):u}},75085:(e,t,a)=>{a.r(t),a.d(t,{PlayViewV2:()=>H});var n=a(32735),r=a(50242),i=a(81886),o=a(23481),s=a(20354),d=a(28400),u=a(65858),c=a(78417),l=a(16714),f=a(67058),v=a(61990),y=a(33803),h=a(89454),p=a(43012),m=a(39151),b=a(1666),g=a(20768),w=a(98064),C=a(31949),F=a(1575),I=a(63719),A=a(26304),P=a(91286),O=a(22902),S=a(79612),B=a(76753),R=a(14070),V=a(97291),j=a(51855),q=a(82817),x=a(7179),E=a(49948),k=a(36873),L=a(27638),M=a(86698),T=a(35014),U=a(97816),_=a(33192),G=a(81812),N=a(61169),Q=o.T.encloseNamespace("shared.play"),D={notFound:v.l,forbidden:{privacy:y.G}};function H(e){var t,a,o,v,y=e.queryParams,H=y.context,Y=y.contextId,Z=y.playNext,$=y.mtv,z=(0,L.u)(u.LZ.PlayPage),J=z.setFavourite,K=z.canFavourite,W=(0,O.T)().hasPermissions,X=(0,j.G)().isPlugin,ee=(0,M.y)().activePresentation,te=(0,T.I)(),ae=s.a.useBasicFetch(w.D.streamableLearning()),ne=s.a.useBasicFetch(C.N.currentUser()),re=s.a.useBasicFetch(F.R.video(e.id)),ie=s.a.useBasicFetch(te.canViewClips&&p.e.videoClips(e.id)),oe=s.a.useBasicFetch(te.canViewInteractives&&g.b.videoInteractives(e.id)),se=s.a.useBasicFetch(m.L.config()),de=s.a.useBasicFetch((null===(t=ne.data)||void 0===t?void 0:t.isAuthenticated)&&b.h.yearGroups(ne.data.customerId)),ue=s.a.useBasicFetch(ee&&h.O.audiencesByPresentationId(ee.id)),ce=(0,G.a)(),le=s.a.useBasicFetch(re.statusCode===r.o.Forbidden&&F.R.video(e.id,c.r.StripMetadata)),fe=(0,q.M)(e.id,!0),ve=(0,k.k)({video:re.data,context:H,contextId:Y,moviesAndTv:$,currentUser:ne.data}),ye=(0,E.l)(e.id,!0),he=s.a.useBasicFetch(F.R.regionAlternatives(e.id)),pe=(0,I.h)({name:null===(a=re.data)||void 0===a?void 0:a.name});return(0,S.M)(B.CG.getVideoMetadata({content:re.data,regionAlternatives:he.data,phraseContext:{phraseHandler:Q,titlePhrase:"pageTitle",descriptionPhrase:"pageDescription"},canonicalLink:_.f.getCanonicalLink({stripPresentationSlug:!0}),allowIndexing:_.f.allowIndexing(),hrefLang:_.f.getContentHrefLang(he.data,(function(e,t){return{application:V.O.VIDEOS,action:R.e.Videos.PLAY_VIDEO,args:[e,d.m.slugify(t)]}}))})),(0,P.v)(re,D,{forbidden:!0}),(0,U.V)(null!==(o=ve.videos)&&void 0!==o?o:[]),(0,x.P)({id:e.id,app:"videos"}),(0,A.b)(le),n.useEffect((function(){var e;re.data&&ae.data&&(null===(e=re.data.libraries)||void 0===e?void 0:e.data.find((function(e){return e.id===ae.data.objectId})))&&i.Q.Ry.throw(new f.d)}),[re.hasCompleted,ae.hasCompleted]),re.data&&ne.hasCompleted&&se.hasCompleted&&ye.hasCompleted?n.createElement(N.R,{video:re.data,clips:ie.data,interactives:oe.data,yearGroups:de.data,curriculums:fe,relatedVideos:ve,setFavourite:J,canFavourite:K,imageCdnUrl:se.data.imageCdnUrl,currentUser:ne.data,pointsOfInterest:ye.items,playNext:Z,featureAccess:te,audiences:ue.data,params:e.queryParams,canManageVideoAccess:W(l.C.ManageVideoAccess),shouldShowSideTableOfContents:ce,tableOfContentsId:null===(v=e.queryParams)||void 0===v?void 0:v.tocId,isPlugin:X,breadcrumbs:pe}):n.createElement(n.Fragment,null)}H.defaultProps={queryParams:{}}}}]);
|
|
2
|
+
//# sourceMappingURL=6341-f07132fa7c-lite.chunk.js.map
|
package/dist/scripts/{2548-c48b8d3e3c-lite.chunk.js.map → 6341-f07132fa7c-lite.chunk.js.map}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/2548-c48b8d3e3c-lite.chunk.js","mappings":"0MA0BMA,EAA8B,CAClCC,SAAU,IACVC,UAAW,CACTC,OAAQ,IACRC,UAAW,IACXC,OAAQ,IACRC,QAAS,KAEXC,WAAY,KAGR,SAAUC,EACdC,GAMkC,IALlCC,EAAA,uDAA+B,CAAC,EAKhCC,EAAA,uDAAgC,CAAC,EAEjC,GAAKF,EAAL,CAGA,IAAIG,EAGFA,EADmB,iBAAVH,EACIA,EAEAA,EAAKI,OAGpB,IAAMC,EAAW,OAAH,wBACTd,GACAU,GAGAE,GAGA,yBAAmCA,KAGpCA,IAAe,aAMfA,IAAe,cAUdD,EAAUJ,YACb,aAAuB,IAAIO,EAASP,YAN/BI,EAAUT,WACb,aAAuB,IAAIY,EAASZ,UAAUI,SAX3CK,EAAUV,UACb,aAAuB,IAAIa,EAASb,UAvBhC,CAuCV,C,6DChFA,SAASc,EAAiBC,GACxB,OAAOA,EAAWC,KAAI,SAAAC,GAAG,OAAIA,EAAIN,UAAU,IAAEO,KAAK,IACpD,CAGM,SAAUC,EACdC,EACAC,EACAC,GAEA,IAAMP,EAAaQ,MAAMC,QAAQJ,GAAeA,EAAc,CAACA,IAE/D,IAAAK,YAAU,WACRV,EAAWW,SAAQ,SAAAT,IACjB,OAAgBA,EAAIN,WAAYU,EAAcC,EAChD,GACF,GAAG,CAAER,EAAiBC,GAAaM,EAAcC,GACnD,C,mbClBM,SAAUK,EAAeC,GAC7B,I,IAAqF,G,EAAvD,WAAc,kBAAM,gBAA8B,GAAE,I,EAAG,E,unBAA7EC,EAAK,KAEPC,GAAcC,EAFK,MAEMF,GAE/B,OAAKC,GAAgBF,EAGd,GAAP,O,yWAAA,CAAYE,GAAW,gCAAOF,GAAO,CAAEI,QAAQ,MAFtCF,CAGX,C,4eCqCMG,EAAY,qBADA,eAGZC,EAAc,CAClBlC,SAAU,IACVC,UAAW,CACTI,QAAS,MAQP,SAAU8B,EAAWC,G,YACzB,EAA8CA,EAAMC,YAA5CC,EAAO,EAAPA,QAASC,EAAS,EAATA,UAAWC,EAAQ,EAARA,SAAUC,EAAG,EAAHA,IAEtC,GAAuC,IAAAC,GAAkB,eAAjDC,EAAY,EAAZA,aAAcC,EAAY,EAAZA,aAEdC,GAAmB,SAAnBA,eAEAC,GAAa,SAAbA,SAEAC,IAAuB,SAAvBA,mBAEFC,IAAgB,SAEhBC,GAAoB,kBAAiC,0BAErDC,GAAc,kBAAkC,mBAChDC,GAAQ,kBAA4B,UAAoBf,EAAMgB,KAC9DC,GAAQ,kBACZL,GAAcM,cAAgB,eAAwBlB,EAAMgB,KAExDG,GAAe,kBACnBP,GAAcQ,qBAAuB,sBAAsCpB,EAAMgB,KAE7EK,GAAS,kBAA6B,cACtCC,GAAa,mBACD,QAAhB,EAAAR,GAAYS,YAAI,eAAEC,kBAAmB,eAA4BV,GAAYS,KAAKE,aAG9EC,GAAY,kBAChBf,IACA,8BAA2CA,GAAmBK,KAG1DW,IAAgC,SAEhCC,GAAgB,kBAA4Bb,GAAMxC,aAAe,eACrE,UAAoByB,EAAMgB,GAAI,oBAE1Ba,IAAc,OAAe7B,EAAMgB,IAAI,GAEvCc,IAAgB,OAAoB,CACxCf,MAAOA,GAAMQ,KACbrB,QAAAA,EACAC,UAAAA,EACA4B,YAAa1B,EACbS,YAAaA,GAAYS,OAErBS,IAAmB,OAAyBhC,EAAMgB,IAAI,GAEtDiB,GAAqB,kBACzB,uBAAiCjC,EAAMgB,KAGnCtB,IAAc,OAAe,CAAEwC,KAAgB,QAAV,EAAAnB,GAAMQ,YAAI,eAAEW,OAuCvD,OArCA,OAAmB,sBAAoC,CACrDC,QAASpB,GAAMQ,KACfU,mBAAoBA,GAAmBV,KACvCa,cAAe,CACbC,cAAexC,EACfyC,YAAa,YACbC,kBAAmB,mBAErBC,cAAe,qBAA2B,CAAEC,uBAAuB,IACnEC,cAAe,oBACfC,SAAU,uBAA6BV,GAAmBV,MAAM,SAACP,EAAYkB,GAAY,MAAM,CAC7FU,YAAa,WACbC,OAAQ,sBACRC,KAAM,CAAE9B,EAAI,YAAmBkB,IAChC,QAGH,OAAqBnB,GAAOjB,EAAa,CAAEjC,WAAW,KACtD,OAAkC,QAApB,EAAAiE,GAAciB,cAAM,QAAI,KACtC,OAAa,CAAE/B,GAAIhB,EAAMgB,GAAIgC,IAAK,YAClC,OAAsBpB,IAEtB,aAAgB,W,MACTb,GAAMQ,MAASV,GAAkBU,OAGd,QAApB,EAAAR,GAAMQ,KAAK0B,iBAAS,eAAE1B,KAAK2B,MAAK,SAAAC,GAAO,OAAIA,EAAQnC,KAAOH,GAAkBU,KAAK6B,QAAQ,MAC3F,aAAuB,IAAI,IAC/B,GAAG,CAAErC,GAAMsC,aAAcxC,GAAkBwC,eAGzCtC,GAAMQ,MACNT,GAAYuC,cACZhC,GAAOgC,cACPrB,GAAiBqB,aAOjB,gBAAC,IAAU,CACTtC,MAAOA,GAAMQ,KACbN,MAAOA,GAAMM,KACbJ,aAAcA,GAAaI,KAC3BD,WAAYA,GAAWC,KACvBM,YAAaA,GACbC,cAAeA,GACfvB,aAAcA,EACdC,aAAcA,EACd8C,YAAajC,GAAOE,KAAK+B,YACzBxC,YAAaA,GAAYS,KACzBS,iBAAkBA,GAAiBuB,MACnCnD,SAAUA,EACVQ,cAAeA,GACfc,UAAWA,GAAUH,KACrBiC,OAAQxD,EAAMC,YACdwD,qBAAsBhD,EAAe,uBACrCkB,8BAA+BA,GAC/B+B,kBAAoC,QAAjB,EAAA1D,EAAMC,mBAAW,eAAE0D,MACtCjD,SAAUA,EACVhB,YAAaA,KAvBR,gCA0BX,CA3HAK,EAAW6D,aAAe,CACxB3D,YAAa,CAAC,E","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/useBreadcrumbs.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/PlayViewV2.tsx"],"sourcesContent":["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 { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","import * as React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { VideoNotFoundError } from 'libs/shared/errors/videos/video-not-found/VideoNotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, InteractiveMetadata, PresentationAudience, RegionAlternative, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nimport { PlayViewProps } from '../PlayViewContainer';\n\nimport { PlayPageV2 } from './components/play-page/PlayPageV2';\n\nconst namespace = 'shared.play';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst videoErrors = {\n notFound: VideoNotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nPlayViewV2.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayViewV2(props: PlayViewProps): React.ReactElement {\n const { context, contextId, playNext, mtv } = props.queryParams;\n\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.PlayPage);\n\n const { hasPermissions } = usePermissions();\n\n const { isPlugin } = usePluginHelper();\n\n const { activePresentation } = usePresentation();\n\n const featureAccess = useVideoFeatureAccess();\n\n const streamableLibrary = Flight.useBasicFetch<HashObject>(LibraryRequests.streamableLearning());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n const clips = Flight.useBasicFetch<Clip[]>(\n featureAccess.canViewClips && ClipRequests.videoClips(props.id)\n );\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(props.id)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n \n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n \n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const strippedVideo = Flight.useBasicFetch<Video>(video.statusCode === HttpStatus.Forbidden &&\n VideoRequests.video(props.id, PermissionFilterOption.StripMetadata));\n\n const curriculums = useCurriculums(props.id, true);\n\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n\n const regionAlternatives = Flight.useBasicFetch<RegionAlternative[]>(\n VideoRequests.regionAlternatives(props.id)\n );\n\n const breadcrumbs = useBreadcrumbs({ name: video.data?.name });\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n regionAlternatives: regionAlternatives.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getContentHrefLang(regionAlternatives.data, (id: string, name: string) => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ id, TextHelper.slugify(name) ]\n }))\n }));\n\n useHandleObjectError(video, videoErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useDeepLinks({ id: props.id, app: 'videos' });\n useCannotConsumeError(strippedVideo);\n\n React.useEffect(() => {\n if (!video.data || !streamableLibrary.data)\n return;\n\n if (video.data.libraries?.data.find(library => library.id === streamableLibrary.data.objectId))\n Core.ErrorHelper.throw(new NotFoundError());\n }, [ video.hasCompleted, streamableLibrary.hasCompleted ]);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <PlayPageV2\n video={video.data}\n clips={clips.data}\n interactives={interactives.data}\n yearGroups={yearGroups.data}\n curriculums={curriculums}\n relatedVideos={relatedVideos}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n imageCdnUrl={config.data.imageCdnUrl}\n currentUser={currentUser.data}\n pointsOfInterest={pointsOfInterest.items}\n playNext={playNext}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n tableOfContentsId={props.queryParams?.tocId}\n isPlugin={isPlugin}\n breadcrumbs={breadcrumbs}\n />\n );\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","map","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","useBreadcrumbs","current","match","breadcrumbs","useBuilder","active","getPhrase","videoErrors","PlayViewV2","props","queryParams","context","contextId","playNext","mtv","u","setFavourite","canFavourite","hasPermissions","isPlugin","activePresentation","featureAccess","streamableLibrary","currentUser","video","id","clips","canViewClips","interactives","canViewInteractives","config","yearGroups","data","isAuthenticated","customerId","audiences","shouldShowSideTableOfContents","strippedVideo","curriculums","relatedVideos","moviesAndTv","pointsOfInterest","regionAlternatives","name","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","stripPresentationSlug","allowIndexing","hrefLang","application","action","args","videos","app","libraries","find","library","objectId","hasCompleted","imageCdnUrl","items","params","canManageVideoAccess","tableOfContentsId","tocId","defaultProps"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"scripts/6341-f07132fa7c-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/errors/handlers/HttpErrorHandlers.ts","file:///app/packages/libs/shared/src/hooks/UseHandleObjectError.ts","file:///app/packages/libs/shared/src/hooks/useBreadcrumbs.ts","file:///app/packages/projects/lite/src/shared/views/play/v2/PlayViewV2.tsx"],"sourcesContent":["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 { useEffect } from 'react';\n\nimport { Flight } from 'libs/common/flight';\n\nimport { handleHttpError, HttpErrorMap, IgnoreHttpErrorMap } from 'libs/shared/errors/handlers/HttpErrorHandlers';\n\nfunction generateCacheKey(flightObjs: Array<Flight.Response<any>>): string {\n return flightObjs.map(obj => obj.statusCode).join(':');\n}\n\n// TODO: Change this to just `useHandleHttpError` and only accept a status code.\nexport function useHandleObjectError(\n _flightObjs: Flight.Response<any> | Array<Flight.Response<any>>,\n customErrors?: HttpErrorMap,\n ignoreErrors?: IgnoreHttpErrorMap\n): void {\n const flightObjs = Array.isArray(_flightObjs) ? _flightObjs : [_flightObjs];\n\n useEffect(() => {\n flightObjs.forEach(obj => {\n handleHttpError(obj.statusCode, customErrors, ignoreErrors);\n });\n }, [ generateCacheKey(flightObjs), customErrors, ignoreErrors ]);\n}","import React from 'react';\n\nimport { Breadcrumb } from 'libs/shared/components/breadcrumbs/Breadcrumbs';\nimport { BreadcrumbService } from 'libs/shared/services/BreadcrumbService';\n\nexport function useBreadcrumbs(current: Breadcrumb): Breadcrumb[] {\n const [ match, useBuilder ] = React.useMemo(() => BreadcrumbService.getBuilder(), []);\n\n const breadcrumbs = useBuilder(match);\n\n if (!breadcrumbs || !current)\n return breadcrumbs;\n\n return [ ...breadcrumbs, { ...current, active: true }];\n}\n\n","import * as React from 'react';\n\nimport { HttpStatus } from 'libs/common/backbone/enums/HttpStatus';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { Flight } from 'libs/common/flight';\nimport { HashObject } from 'libs/common/react/interfaces';\nimport { TextHelper } from 'libs/common/react/utils/TextHelper';\n\nimport { LocationContext } from 'libs/analytics/interfaces';\n\nimport { PermissionFilterOption } from 'libs/shared/enums/PermissionFilterOption';\nimport { PermissionName } from 'libs/shared/enums/PermissionName';\nimport { NotFoundError } from 'libs/shared/errors/general/not-found/NotFoundError';\nimport { VideoNotFoundError } from 'libs/shared/errors/videos/video-not-found/VideoNotFoundError';\nimport { VideoPrivateError } from 'libs/shared/errors/videos/video-private/VideoPrivateError';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClipRequests } from 'libs/shared/flight-requests/ClipRequests';\nimport { ConfigRequests } from 'libs/shared/flight-requests/ConfigRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { InteractiveRequests } from 'libs/shared/flight-requests/InteractiveRequests';\nimport { LibraryRequests } from 'libs/shared/flight-requests/LibraryRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { VideoRequests } from 'libs/shared/flight-requests/VideoRequests';\nimport { useBreadcrumbs } from 'libs/shared/hooks/useBreadcrumbs';\nimport { useCannotConsumeError } from 'libs/shared/hooks/useCannotConsumeError';\nimport { useHandleObjectError } from 'libs/shared/hooks/UseHandleObjectError';\nimport { usePermissions } from 'libs/shared/hooks/usePermissions';\nimport { useSetPageMetadata } from 'libs/shared/hooks/useSetPageMetadata';\nimport { Clip, Config, CurrentUser, InteractiveMetadata, PresentationAudience, RegionAlternative, Video, YearGroup } from 'libs/shared/interfaces';\nimport { PageMetadataHelper } from 'libs/shared/utils/PageMetadataHelper';\n\nimport { Actions } from 'shared/constants/LiteActions';\nimport { AppChannels } from 'shared/constants/LiteRadioChannels';\nimport { usePluginHelper } from 'shared/hooks/use-plugin-helper/usePluginHelper';\nimport { useCurriculums } from 'shared/hooks/useCurriculums';\nimport { useDeepLinks } from 'shared/hooks/useDeepLinks';\nimport { useFetchPointsOfInterest } from 'shared/hooks/useFetchPointsOfInterest';\nimport { useGetRelatedVideos } from 'shared/hooks/useGetRelatedVideos';\nimport { useLiteFavourites } from 'shared/hooks/useLiteFavourites';\nimport { usePresentation } from 'shared/hooks/usePresentation';\nimport { useVideoFeatureAccess } from 'shared/hooks/useVideoFeatureAccess';\nimport { useVideoMixin } from 'shared/hooks/useVideoMixin';\nimport { SeoHelper } from 'shared/utils/SeoHelper';\nimport { useShouldShowSideTableOfContents } from 'shared/views/play/v2/hooks/useShouldShowTableOfContents';\n\nimport { PlayViewProps } from '../PlayViewContainer';\n\nimport { PlayPageV2 } from './components/play-page/PlayPageV2';\n\nconst namespace = 'shared.play';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst videoErrors = {\n notFound: VideoNotFoundError,\n forbidden: {\n privacy: VideoPrivateError\n }\n};\n\nPlayViewV2.defaultProps = {\n queryParams: {}\n};\n\nexport function PlayViewV2(props: PlayViewProps): React.ReactElement {\n const { context, contextId, playNext, mtv } = props.queryParams;\n\n const { setFavourite, canFavourite } = useLiteFavourites(LocationContext.PlayPage);\n\n const { hasPermissions } = usePermissions();\n\n const { isPlugin } = usePluginHelper();\n\n const { activePresentation } = usePresentation();\n\n const featureAccess = useVideoFeatureAccess();\n\n const streamableLibrary = Flight.useBasicFetch<HashObject>(LibraryRequests.streamableLearning());\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const video = Flight.useBasicFetch<Video>(VideoRequests.video(props.id));\n const clips = Flight.useBasicFetch<Clip[]>(\n featureAccess.canViewClips && ClipRequests.videoClips(props.id)\n );\n const interactives = Flight.useBasicFetch<InteractiveMetadata[]>(\n featureAccess.canViewInteractives && InteractiveRequests.videoInteractives(props.id)\n );\n const config = Flight.useBasicFetch<Config>(ConfigRequests.config());\n const yearGroups = Flight.useBasicFetch<YearGroup[]>(\n currentUser.data?.isAuthenticated && CustomerRequests.yearGroups(currentUser.data.customerId)\n );\n \n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n activePresentation &&\n AudienceRequests.audiencesByPresentationId(activePresentation.id)\n );\n \n const shouldShowSideTableOfContents = useShouldShowSideTableOfContents();\n\n const strippedVideo = Flight.useBasicFetch<Video>(video.statusCode === HttpStatus.Forbidden &&\n VideoRequests.video(props.id, PermissionFilterOption.StripMetadata));\n\n const curriculums = useCurriculums(props.id, true);\n\n const relatedVideos = useGetRelatedVideos({\n video: video.data,\n context,\n contextId,\n moviesAndTv: mtv,\n currentUser: currentUser.data\n });\n const pointsOfInterest = useFetchPointsOfInterest(props.id, true);\n\n const regionAlternatives = Flight.useBasicFetch<RegionAlternative[]>(\n VideoRequests.regionAlternatives(props.id)\n );\n\n const breadcrumbs = useBreadcrumbs({ name: video.data?.name });\n\n useSetPageMetadata(PageMetadataHelper.getVideoMetadata({\n content: video.data,\n regionAlternatives: regionAlternatives.data,\n phraseContext: {\n phraseHandler: getPhrase,\n titlePhrase: 'pageTitle',\n descriptionPhrase: 'pageDescription'\n },\n canonicalLink: SeoHelper.getCanonicalLink({ stripPresentationSlug: true }),\n allowIndexing: SeoHelper.allowIndexing(),\n hrefLang: SeoHelper.getContentHrefLang(regionAlternatives.data, (id: string, name: string) => ({\n application: AppChannels.VIDEOS,\n action: Actions.Videos.PLAY_VIDEO,\n args: [ id, TextHelper.slugify(name) ]\n }))\n }));\n\n useHandleObjectError(video, videoErrors, { forbidden: true });\n useVideoMixin(relatedVideos.videos ?? []);\n useDeepLinks({ id: props.id, app: 'videos' });\n useCannotConsumeError(strippedVideo);\n\n React.useEffect(() => {\n if (!video.data || !streamableLibrary.data)\n return;\n\n if (video.data.libraries?.data.find(library => library.id === streamableLibrary.data.objectId))\n Core.ErrorHelper.throw(new NotFoundError());\n }, [ video.hasCompleted, streamableLibrary.hasCompleted ]);\n\n const dataLoaded = (\n video.data &&\n currentUser.hasCompleted &&\n config.hasCompleted &&\n pointsOfInterest.hasCompleted\n );\n\n if (!dataLoaded)\n return <></>;\n\n return (\n <PlayPageV2\n video={video.data}\n clips={clips.data}\n interactives={interactives.data}\n yearGroups={yearGroups.data}\n curriculums={curriculums}\n relatedVideos={relatedVideos}\n setFavourite={setFavourite}\n canFavourite={canFavourite}\n imageCdnUrl={config.data.imageCdnUrl}\n currentUser={currentUser.data}\n pointsOfInterest={pointsOfInterest.items}\n playNext={playNext}\n featureAccess={featureAccess}\n audiences={audiences.data}\n params={props.queryParams}\n canManageVideoAccess={hasPermissions(PermissionName.ManageVideoAccess)}\n shouldShowSideTableOfContents={shouldShowSideTableOfContents}\n tableOfContentsId={props.queryParams?.tocId}\n isPlugin={isPlugin}\n breadcrumbs={breadcrumbs}\n />\n );\n}"],"names":["defaultErrors","notFound","forbidden","rating","yearLevel","region","privacy","badRequest","handleHttpError","info","customErrorMap","ignoreMap","statusCode","status","errorMap","generateCacheKey","flightObjs","map","obj","join","useHandleObjectError","_flightObjs","customErrors","ignoreErrors","Array","isArray","useEffect","forEach","useBreadcrumbs","current","match","breadcrumbs","useBuilder","active","getPhrase","videoErrors","PlayViewV2","props","queryParams","context","contextId","playNext","mtv","u","setFavourite","canFavourite","hasPermissions","isPlugin","activePresentation","featureAccess","streamableLibrary","currentUser","video","id","clips","canViewClips","interactives","canViewInteractives","config","yearGroups","data","isAuthenticated","customerId","audiences","shouldShowSideTableOfContents","strippedVideo","curriculums","relatedVideos","moviesAndTv","pointsOfInterest","regionAlternatives","name","content","phraseContext","phraseHandler","titlePhrase","descriptionPhrase","canonicalLink","stripPresentationSlug","allowIndexing","hrefLang","application","action","args","videos","app","libraries","find","library","objectId","hasCompleted","imageCdnUrl","items","params","canManageVideoAccess","tableOfContentsId","tocId","defaultProps"],"sourceRoot":""}
|