@clickview/lite 0.52.4-rc.0 → 0.52.4-rc.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/bundles.json +1 -1
- package/dist/css/{1329-lite-cdc45079de.chunk.css → 1329-lite-be86e46c78.chunk.css} +1 -1
- package/dist/css/{1760-lite-19ef9620ac.chunk.css → 1760-lite-bcd14ea6d2.chunk.css} +1 -1
- package/dist/css/{5549-lite-d751a30ca4.chunk.css → 3640-lite-97ed26d0aa.chunk.css} +1 -1
- package/dist/css/{5220-lite-8b4a93ca31.chunk.css → 5220-lite-9832e2c2fb.chunk.css} +1 -1
- package/dist/css/{3640-lite-d751a30ca4.chunk.css → 5549-lite-97ed26d0aa.chunk.css} +1 -1
- package/dist/css/{6094-lite-19ef9620ac.chunk.css → 6094-lite-bcd14ea6d2.chunk.css} +1 -1
- package/dist/scripts/{1329-57aa3d33cb-lite.chunk.js → 1329-9abd7031af-lite.chunk.js} +2 -2
- package/dist/scripts/{1329-57aa3d33cb-lite.chunk.js.map → 1329-9abd7031af-lite.chunk.js.map} +1 -1
- package/dist/scripts/{1760-19e88443c6-lite.chunk.js → 1760-8d51aa0b08-lite.chunk.js} +1 -1
- package/dist/scripts/{1760-19e88443c6-lite.chunk.js.map → 1760-8d51aa0b08-lite.chunk.js.map} +1 -1
- package/dist/scripts/{3640-ac303efb99-lite.chunk.js → 3640-1ac0a110f4-lite.chunk.js} +1 -1
- package/dist/scripts/{3640-ac303efb99-lite.chunk.js.map → 3640-1ac0a110f4-lite.chunk.js.map} +1 -1
- package/dist/scripts/5220-a0599fa845-lite.chunk.js +3 -0
- package/dist/scripts/5220-a0599fa845-lite.chunk.js.map +1 -0
- package/dist/scripts/{5549-ae40aeb0f8-lite.chunk.js → 5549-e0ed88aaa1-lite.chunk.js} +1 -1
- package/dist/scripts/{5549-ae40aeb0f8-lite.chunk.js.map → 5549-e0ed88aaa1-lite.chunk.js.map} +1 -1
- package/dist/scripts/{6094-d5fa8b07dc-lite.chunk.js → 6094-8546003d79-lite.chunk.js} +1 -1
- package/dist/scripts/{6094-d5fa8b07dc-lite.chunk.js.map → 6094-8546003d79-lite.chunk.js.map} +1 -1
- package/dist/scripts/6852-2ff4fd69ed-lite.chunk.js +2 -0
- package/dist/scripts/6852-2ff4fd69ed-lite.chunk.js.map +1 -0
- package/dist/scripts/8055-3449680f69-lite.chunk.js +3 -0
- package/dist/scripts/8055-3449680f69-lite.chunk.js.map +1 -0
- package/dist/scripts/{bundle-507079f8c6.min.js → bundle-3908df5fdf.min.js} +3 -3
- package/dist/scripts/{bundle-507079f8c6.min.js.map → bundle-3908df5fdf.min.js.map} +1 -1
- package/package.json +1 -1
- package/dist/scripts/5220-58d9529f21-lite.chunk.js +0 -3
- package/dist/scripts/5220-58d9529f21-lite.chunk.js.map +0 -1
- package/dist/scripts/6852-96412e2088-lite.chunk.js +0 -2
- package/dist/scripts/6852-96412e2088-lite.chunk.js.map +0 -1
- package/dist/scripts/8055-7d46e34c6a-lite.chunk.js +0 -3
- package/dist/scripts/8055-7d46e34c6a-lite.chunk.js.map +0 -1
- /package/dist/scripts/{1329-57aa3d33cb-lite.chunk.js.LICENSE.txt → 1329-9abd7031af-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{5220-58d9529f21-lite.chunk.js.LICENSE.txt → 5220-a0599fa845-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{8055-7d46e34c6a-lite.chunk.js.LICENSE.txt → 8055-3449680f69-lite.chunk.js.LICENSE.txt} +0 -0
- /package/dist/scripts/{bundle-507079f8c6.min.js.LICENSE.txt → bundle-3908df5fdf.min.js.LICENSE.txt} +0 -0
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"scripts/8055-7d46e34c6a-lite.chunk.js","mappings":"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","sources":["file:///app/packages/libs/shared/src/apps/upload/utils/FileExtensionsHelper.ts","file:///app/packages/libs/shared/src/components/forms/form-feedback/FormFeedback.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/enums/FeedbackType.ts","file:///app/packages/libs/shared/src/enums/UploadInteractionType.ts","file:///app/packages/libs/shared/src/flight-requests/FeedbackRequests.ts","file:///app/packages/libs/shared/src/hooks/UseGetCollectionItems.ts","file:///app/packages/libs/shared/src/utils/FeedbackFormHelper.ts","file:///app/packages/libs/shared/src/utils/FormHelper.ts","file:///app/packages/libs/shared/src/views/feedback/enums/FeedbackOption.ts","file:///app/packages/libs/shared/src/views/feedback/constants/FeedbackFormTitles.ts","file:///app/packages/libs/shared/src/views/feedback/constants/FeedbackImageUrls.ts","file:///app/packages/libs/shared/src/views/feedback/components/feedback-selector/feedback-selector.scss","file:///app/packages/libs/shared/src/views/feedback/components/feedback-selector/FeedbackSelector.tsx","file:///app/packages/libs/shared/src/views/feedback/components/feedback-buttons/FeedbackButtons.tsx","file:///app/packages/libs/shared/src/views/feedback/components/feedback-form-state/feedback-form-state.scss","file:///app/packages/libs/shared/src/views/feedback/components/feedback-form-state/FeedbackFormState.tsx","file:///app/packages/libs/shared/src/views/feedback/constants/FeedbackFormValidation.ts","file:///app/packages/libs/shared/src/views/feedback/components/forms/give-praise/GivePraise.tsx","file:///app/packages/libs/shared/src/views/feedback/components/forms/other/Other.tsx","file:///app/packages/libs/shared/src/views/feedback/components/forms/raise-issue/RaiseIssue.tsx","file:///app/packages/libs/shared/src/constants/ContactDetails.ts","file:///app/packages/libs/shared/src/views/feedback/components/feedback-file-upload/file-select.scss","file:///app/packages/libs/shared/src/views/feedback/components/feedback-file-upload/FeedbackFileUpload.tsx","file:///app/packages/libs/shared/src/views/feedback/components/feedback-upload-list/feedback-upload-list.scss","file:///app/packages/libs/shared/src/views/feedback/components/feedback-upload-list/FeedbackUploadList.tsx","file:///app/packages/libs/shared/src/views/feedback/components/feedback-uploaded-list/FeedbackUploadedList.tsx","file:///app/packages/libs/shared/src/views/feedback/components/forms/report-bug/ReportBug.tsx","file:///app/packages/libs/shared/src/views/feedback/components/forms/request-livestream/RequestLivestream.tsx","file:///app/packages/libs/shared/src/views/feedback/components/forms/request-video/before-requesting/before-requesting.scss","file:///app/packages/libs/shared/src/views/feedback/components/forms/request-video/before-requesting/BeforeRequesting.tsx","file:///app/packages/libs/shared/src/views/feedback/components/forms/request-video/RequestVideo.tsx","file:///app/packages/libs/shared/src/views/feedback/components/forms/suggest-improvement/SuggestImprovement.tsx","file:///app/packages/libs/shared/src/views/feedback/components/forms/FeedbackForm.tsx","file:///app/packages/libs/shared/src/views/feedback/views/give-feedback/GiveFeedbackView.tsx"],"sourcesContent":["import * as _ from 'underscore';\n\n/**\n * This are kept as separate variables for when we eventually need a single group of them.\n * For example when we add image upload support.\n */\n\nconst pdfExtensions = ['pdf'];\nconst docExtensions = [ 'doc', 'docx', 'dotx', 'dot', 'rtf', 'docm', 'odt' ];\nconst textExtensions = [ 'csv', 'txt' ];\nconst excelExtensions = [ 'xls', 'xlt', 'xlsx' ];\nconst imageExtensions = [ 'jpg', 'tif', 'png', 'bmp', 'gif', 'jpeg' ];\nconst videoMimeType = 'video/*';\nconst archiveExtensions = [ 'zip', 'rar' ];\nconst powerPointExtensions = [ 'ppt', 'pot', 'pps', 'pptx' ];\n\nconst subtitleExtensions = ['srt'];\n\nconst FileExtensions = {\n IMAGES: `.${imageExtensions.join(',.')}`,\n VIDEO: videoMimeType,\n MIXED_MEDIA: `.${imageExtensions.join(',.')},${videoMimeType}`,\n RESOURCES: `.${[\n ...docExtensions,\n ...excelExtensions,\n ...powerPointExtensions,\n ...pdfExtensions,\n ...textExtensions,\n ...imageExtensions,\n ...archiveExtensions\n ].join(',.')}`,\n SUBTITLES: `.${subtitleExtensions.join(',.')}`\n};\n\nconst FileExtensionHelper = {\n getResourceType(extension: string): string {\n const ext = extension.toLowerCase();\n\n if (_.contains(docExtensions, ext)) return 'document';\n if (_.contains(excelExtensions, ext)) return 'excel';\n if (_.contains(powerPointExtensions, ext)) return 'powerpoint';\n if (_.contains(pdfExtensions, ext)) return 'pdf';\n\n if (_.contains(textExtensions, ext)) return 'text';\n if (_.contains(imageExtensions, ext)) return 'image';\n if (_.contains(archiveExtensions, ext)) return 'archive';\n if (_.contains(subtitleExtensions, ext)) return 'subtitle';\n\n return '';\n }\n};\n\nexport { FileExtensions, FileExtensionHelper };","import React from 'react';\n\ninterface FormFeedbackProps extends React.PropsWithChildren {\n name: string;\n className?: string;\n}\n\nexport function FormFeedback(props: FormFeedbackProps) {\n return (\n <span id={`${props.name}Error`} className={`${props.className} invalid-feedback d-block`} role='status'>{props.children}</span>\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}","export enum FeedbackType {\n Other,\n SuggestImprovement,\n ReportBug,\n RequestVideo,\n RaiseIssue,\n GivePraise,\n Footer,\n RequestLivestream\n}","export enum InteractionType {\n FileSelect = 'file-select',\n DragDrop = 'drag-drop'\n}","import { HttpVerbs } from 'libs/common/backbone/enums/HttpVerbs';\nimport { Flight } from 'libs/common/react/index';\n\nimport { FeedbackFormRequest } from 'libs/shared/interfaces/requests/FeedbackFormRequest';\n\nexport const FeedbackRequests = {\n submitFeedback(requestData: FeedbackFormRequest, formValues: Record<string, string>): Flight.Request {\n return {\n url: '{gateway}/v1/feedback',\n key: 'submit:feedback',\n type: HttpVerbs.POST,\n data: {\n ...requestData,\n ...formValues\n }\n };\n }\n};","import React from 'react';\n\nimport { Core } from 'libs/common/core';\n\n/**\n * Hook used to listen to updates on a Backbone Collection\n * and trigger a re-render.\n */\nexport function useGetCollectionItems<T>(\n getCollection: () => Core.Collection,\n onRemove?: () => void,\n dependencies: React.DependencyList = []\n): T[] {\n const [ , setUpdate ] = React.useState(false);\n\n React.useEffect(() => {\n const collection = getCollection();\n\n if (!collection)\n return;\n\n collection.off('add remove change');\n collection.on('add remove change', () => {\n setUpdate(s => !s);\n });\n if (onRemove)\n collection.on('remove', onRemove);\n return () => { collection.off('add remove change'); };\n }, dependencies);\n\n return getCollection()?.toJSON();\n}","import Dropzone from 'dropzone';\n\nimport { UploadItem } from 'libs/shared/apps/upload/services/UploadService';\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { UserRole } from 'libs/shared/enums/UserRole';\nimport { CurrentUser, Customer } from 'libs/shared/interfaces';\nimport { FeedbackUserDetails } from 'libs/shared/interfaces/requests/FeedbackFormRequest';\n\nexport const FeedbackFormHelper = {\n getUserInfo: (\n currentUser: CurrentUser,\n customer: Customer\n ): FeedbackUserDetails => {\n return {\n id: currentUser.id,\n username: currentUser.username,\n email: currentUser.email,\n userType: currentUser.role === UserRole.Admin ? 'Admin' : 'Staff',\n customerId: currentUser.customerId,\n cvcId: customer.crmId,\n customerName: customer.name,\n instanceRegion: currentUser.instanceRegion,\n contentRegion: currentUser.contentRegion,\n firstName: currentUser.givenName,\n lastName: currentUser.familyName\n };\n },\n\n mapInstanceRegionToTag: (instanceRegion: InstanceRegion): string => {\n switch (instanceRegion) {\n case InstanceRegion.AU:\n return 'au';\n case InstanceRegion.NZ:\n return 'nz';\n case InstanceRegion.UK:\n return 'uk';\n case InstanceRegion.US:\n return 'us';\n }\n },\n\n getTags: (currentUser: CurrentUser, product: ProductId, hasStudentExperience: boolean, extraTags: string[]) => {\n const tags = [\n product,\n ...extraTags\n ];\n\n tags.push(hasStudentExperience ? 'student' : 'staff');\n \n if (currentUser.role === UserRole.Admin)\n tags.push('administrator');\n \n const regionTag = FeedbackFormHelper.mapInstanceRegionToTag(currentUser.instanceRegion);\n \n if (regionTag)\n tags.push(regionTag);\n\n return tags;\n },\n\n categorizeFiles(files: UploadItem[]) {\n return files.reduce((result, file) => {\n const fileInfo = file.get('fileInfo');\n if (Dropzone.isValidFile(file.get('file'), FileExtensions.VIDEO)) {\n result.videoUrls.push(fileInfo?.url);\n } else {\n result.imageUrls.push(fileInfo?.url);\n }\n return result;\n }, {\n imageUrls: [],\n videoUrls: []\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};","export enum FeedbackOption {\n SUGGEST_IMPROVEMENT = 'suggestImprovement',\n REPORT_BUG = 'reportBug',\n REQUEST_VIDEO = 'requestVideo',\n REQUEST_LIVESTREAM = 'requestLivestream',\n GIVE_PRAISE = 'givePraise',\n RAISE_ISSUE = 'raiseIssue',\n OTHER = 'other'\n}","import { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\n\nconst namespace = 'shared.feedbackFormTitles';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const getFeedbackFormTitles = (feedbackOption: FeedbackOption) => {\n switch (feedbackOption) {\n case FeedbackOption.SUGGEST_IMPROVEMENT: return getPhrase(feedbackOption);\n case FeedbackOption.REPORT_BUG: return getPhrase(feedbackOption);\n case FeedbackOption.REQUEST_VIDEO: return getPhrase(feedbackOption);\n case FeedbackOption.REQUEST_LIVESTREAM: return getPhrase(feedbackOption);\n case FeedbackOption.GIVE_PRAISE: return getPhrase(feedbackOption);\n case FeedbackOption.RAISE_ISSUE: return getPhrase(feedbackOption);\n case FeedbackOption.OTHER: return getPhrase(feedbackOption);\n }\n};","import { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\n\nexport const FEEDBACK_IMAGE_URLS = {\n mailSent: 'https://image.api.prd.cvnet.io/v2/images/2mZ7L9',\n mediaPreview: 'https://image.api.prd.cvnet.io/v2/images/ageRM0',\n lightBulb: 'https://image.api.prd.cvnet.io/v2/images/Oqg3JN',\n heartHands: 'https://image.api.prd.cvnet.io/v2/images/1ML8Oj',\n videoAlert: 'https://image.api.prd.cvnet.io/v2/images/dq2oMq',\n\n [FeedbackOption.REQUEST_VIDEO]: {\n default: 'https://image.api.prd.cvnet.io/v2/images/G1YGdn',\n hover: 'https://image.api.prd.cvnet.io/v2/images/K6yPxz'\n },\n [FeedbackOption.REQUEST_LIVESTREAM]: {\n default: 'https://image.api.prd.cvnet.io/v2/images/G1YGdn',\n hover: 'https://image.api.prd.cvnet.io/v2/images/K6yPxz'\n },\n [FeedbackOption.SUGGEST_IMPROVEMENT]: {\n default: 'https://image.api.prd.cvnet.io/v2/images/g7aR1l',\n hover: 'https://image.api.prd.cvnet.io/v2/images/zMR0Dk'\n },\n [FeedbackOption.RAISE_ISSUE]: {\n default: 'https://image.api.prd.cvnet.io/v2/images/5boW78',\n hover: 'https://image.api.prd.cvnet.io/v2/images/m6yRKr'\n },\n [FeedbackOption.GIVE_PRAISE]: {\n default: 'https://image.api.prd.cvnet.io/v2/images/nE1mdz',\n hover: 'https://image.api.prd.cvnet.io/v2/images/JjEnmR'\n },\n [FeedbackOption.REPORT_BUG]: {\n default: 'https://image.api.prd.cvnet.io/v2/images/AOdYpo',\n hover: 'https://image.api.prd.cvnet.io/v2/images/yro9NM'\n },\n [FeedbackOption.OTHER]: {\n default: 'https://image.api.prd.cvnet.io/v2/images/Eoaykj',\n hover: 'https://image.api.prd.cvnet.io/v2/images/wN59Zg'\n }\n};\n","// extracted by mini-css-extract-plugin\nexport default {\"image\":\"_2jo0\"};","import React from 'react';\n\nimport { DivButton } from 'libs/shared/components/div-button/DivButton';\nimport { useHover } from 'libs/shared/hooks/UseHover';\nimport { getFeedbackFormTitles } from 'libs/shared/views/feedback/constants/FeedbackFormTitles';\nimport { FEEDBACK_IMAGE_URLS } from 'libs/shared/views/feedback/constants/FeedbackImageUrls';\nimport { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\n\nimport styles from './feedback-selector.scss';\n\ninterface FeedbackSelectorOptionProps {\n option: FeedbackOption;\n onSelectOption?: (option: FeedbackOption) => void;\n}\n\nfunction FeedbackSelectorOption(props: FeedbackSelectorOptionProps) {\n const [ ref, isHovering ] = useHover<HTMLImageElement>();\n\n const feedbackImage = FEEDBACK_IMAGE_URLS[props.option];\n\n return (\n <DivButton ref={ref} className='col-lg-4 col-sm-6 col-12' onClick={() => props.onSelectOption(props.option)}>\n <div className='d-flex flex-column align-items-center h-100 rounded border py-3 gap-2'>\n <img\n className={styles.image}\n src={(isHovering ? feedbackImage.hover : feedbackImage.default)}\n alt={getFeedbackFormTitles(props.option)}\n />\n \n <p className='fw-semibold text-center mb-0'>{getFeedbackFormTitles(props.option)}</p>\n </div>\n </DivButton>\n );\n}\n\ninterface FeedbackSelectorProps {\n options: FeedbackOption[];\n onSelectOption: (option: FeedbackOption) => void;\n}\n\nexport function FeedbackSelector(props: FeedbackSelectorProps) {\n return (\n <div className='row g-2'>\n {props.options.map(option =>\n <FeedbackSelectorOption key={option} option={option} onSelectOption={props.onSelectOption} />)}\n </div>\n );\n}","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\nimport { FeedbackFormStage } from 'libs/shared/views/feedback/interfaces/FeedbackForm';\n\nconst namespace = 'shared.feedbackButtons';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface FeedbackButtonsProps {\n submitText?: string;\n formStage: FeedbackFormStage;\n setSelectedOption: (option: FeedbackOption) => void;\n closePopup?: () => void;\n}\n\nexport function FeedbackButtons(props: FeedbackButtonsProps) {\n const formikProps = useFormikContextWrapper();\n\n return (\n <PopupButtons>\n {props.formStage === 'form' && (\n <>\n <PopupButtons.Cancel onClick={() => props.setSelectedOption(null)} text={getPhrase('cancel')} />\n <PopupButtons.Submit variant='dark' text={props.submitText || getPhrase('submit')} disabled={!formikProps.isValid} />\n </>\n )}\n \n {props.formStage === 'success' && (\n <PopupButtons.Cancel variant='dark' text={getPhrase('close')} onClick={props.closePopup} />\n )}\n </PopupButtons>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"successImage\":\"yp7vQ\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FEEDBACK_IMAGE_URLS } from 'libs/shared/views/feedback/constants/FeedbackImageUrls';\nimport { FeedbackFormStage } from 'libs/shared/views/feedback/interfaces/FeedbackForm';\n\nimport styles from './feedback-form-state.scss';\n\nconst namespace = 'shared.feedbackFormState';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface FeedbackFormStateProps {\n formStage: FeedbackFormStage;\n successImageUrl?: string;\n successHeading?: string;\n successDescription?: string;\n}\n\nexport function FeedbackFormState(props: FeedbackFormStateProps) {\n if (props.formStage === 'form') return <></>;\n\n if (props.formStage === 'error') return <></>;\n\n return (\n <div className='text-center'>\n <div className='mb-3'>\n <img className={styles.successImage} src={props.successImageUrl || FEEDBACK_IMAGE_URLS.mailSent} />\n </div>\n <h4 className='mb-3'>{props.successHeading || getPhrase('successHeading')}</h4>\n <p className='mb-3'>{props.successDescription || getPhrase('successDescription')}</p>\n </div>\n );\n}","import * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nconst namespace = 'shared.feedbackForm';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport const FEEDBACK_FORM_MIN_CHARACTERS = 10;\nexport const FEEDBACK_FORM_MAX_CHARACTERS = 5000;\n\ntype FeedbackFormErrorPhrases = 'requiredError' | 'minCharactersError' | 'maxCharactersError';\n\nexport const getFeedbackFormErrorMessage = (phrase: FeedbackFormErrorPhrases) => {\n switch (phrase) {\n case 'requiredError': return getPhrase(phrase);\n case 'minCharactersError': return getPhrase(phrase, { limit: FEEDBACK_FORM_MIN_CHARACTERS });\n case 'maxCharactersError': return getPhrase('maxCharactersError', { limit: FEEDBACK_FORM_MAX_CHARACTERS });\n }\n};\n\nexport const FeedbackFormYupString = () => Yup.string()\n .min(FEEDBACK_FORM_MIN_CHARACTERS, getFeedbackFormErrorMessage('minCharactersError'))\n .max(FEEDBACK_FORM_MAX_CHARACTERS, getFeedbackFormErrorMessage('maxCharactersError'));","import React from 'react';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { FeedbackFormWrapper } from 'libs/shared/views/feedback/components/forms/FeedbackForm';\nimport { FeedbackFormYupString, getFeedbackFormErrorMessage } from 'libs/shared/views/feedback/constants/FeedbackFormValidation';\nimport { FEEDBACK_IMAGE_URLS } from 'libs/shared/views/feedback/constants/FeedbackImageUrls';\nimport { FeedbackFormSharedProps } from 'libs/shared/views/feedback/interfaces/FeedbackForm';\n\nconst namespace = 'shared.feedbackGivePraise';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface GivePraiseFormValues {\n praise: string;\n}\n\nconst INITIAL_VALUES: GivePraiseFormValues = {\n praise: ''\n};\n\nconst VALIDATION_SCHEMA = Yup.object().shape<GivePraiseFormValues>({\n praise: FeedbackFormYupString().required(getFeedbackFormErrorMessage('requiredError'))\n}).noUnknown();\n\nfunction GivePraiseFields() {\n const formikProps = useFormikContextWrapper<GivePraiseFormValues>();\n\n return (\n <>\n <FormField\n as='textarea'\n placeholder={getPhrase('givePraisePlaceholder')}\n label={getPhrase('givePraiseLabel')}\n name='praise'\n rows={5}\n value={formikProps.values.praise}\n showRequiredStar\n />\n </>\n );\n}\n\nexport function GivePraise(props: FeedbackFormSharedProps) {\n return (\n <FeedbackFormWrapper\n {...props}\n initialValues={{\n ...INITIAL_VALUES,\n ...props.initialValues\n }}\n validationSchema={VALIDATION_SCHEMA}\n successImageUrl={FEEDBACK_IMAGE_URLS.heartHands}\n successHeading={getPhrase('successHeading')}\n successDescription={getPhrase('successDescription')}\n >\n <GivePraiseFields />\n </FeedbackFormWrapper>\n );\n}","import React from 'react';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { FeedbackFormWrapper } from 'libs/shared/views/feedback/components/forms/FeedbackForm';\nimport { FeedbackFormYupString, getFeedbackFormErrorMessage } from 'libs/shared/views/feedback/constants/FeedbackFormValidation';\nimport { FeedbackFormSharedProps } from 'libs/shared/views/feedback/interfaces/FeedbackForm';\n\nconst namespace = 'shared.feedbackOther';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface OtherFormValues {\n feedback: string;\n}\n\nconst INITIAL_VALUES: OtherFormValues = {\n feedback: ''\n};\n\nconst VALIDATION_SCHEMA = Yup.object().shape<OtherFormValues>({\n feedback: FeedbackFormYupString().required(getFeedbackFormErrorMessage('requiredError'))\n}).noUnknown();\n\nfunction OtherFields() {\n const formikProps = useFormikContextWrapper<OtherFormValues>();\n\n return (\n <>\n <FormField\n as='textarea'\n placeholder={getPhrase('otherPlaceholder')}\n label={getPhrase('otherLabel')}\n name='feedback'\n rows={5}\n value={formikProps.values.feedback}\n showRequiredStar\n />\n </>\n );\n}\n\nexport function Other(props: FeedbackFormSharedProps) {\n return (\n <FeedbackFormWrapper\n {...props}\n initialValues={{\n ...INITIAL_VALUES,\n ...props.initialValues\n }}\n validationSchema={VALIDATION_SCHEMA}\n >\n <OtherFields />\n </FeedbackFormWrapper>\n );\n}","import React from 'react';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { FeedbackFormWrapper } from 'libs/shared/views/feedback/components/forms/FeedbackForm';\nimport { FeedbackFormYupString, getFeedbackFormErrorMessage } from 'libs/shared/views/feedback/constants/FeedbackFormValidation';\nimport { FeedbackFormSharedProps } from 'libs/shared/views/feedback/interfaces/FeedbackForm';\n\nconst namespace = 'shared.feedbackRaiseIssue';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface RaiseIssueFormValues {\n issue: string;\n}\n\nconst INITIAL_VALUES: RaiseIssueFormValues = {\n issue: ''\n};\n\nconst VALIDATION_SCHEMA = Yup.object().shape<RaiseIssueFormValues>({\n issue: FeedbackFormYupString().required(getFeedbackFormErrorMessage('requiredError'))\n}).noUnknown();\n\nfunction RaiseIssueFields() {\n const formikProps = useFormikContextWrapper<RaiseIssueFormValues>();\n\n return (\n <>\n <FormField\n as='textarea'\n placeholder={getPhrase('raiseIssuePlaceholder')}\n label={getPhrase('raiseIssueLabel')}\n name='issue'\n rows={5}\n value={formikProps.values.issue}\n showRequiredStar\n />\n </>\n );\n}\n\nexport function RaiseIssue(props: FeedbackFormSharedProps) {\n return (\n <FeedbackFormWrapper\n {...props}\n initialValues={{\n ...INITIAL_VALUES,\n ...props.initialValues\n }}\n validationSchema={VALIDATION_SCHEMA}\n >\n <RaiseIssueFields />\n </FeedbackFormWrapper>\n );\n}","import { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\n\ntype ContactSupportDetails = {\n [key in InstanceRegion]: {\n phone: string;\n email: string;\n website: string;\n };\n}\n\nexport const CONTACT_SUPPORT_DETAILS: ContactSupportDetails = {\n [InstanceRegion.AU]: {\n phone: '02 9509 2600',\n email: 'support@clickview.com.au',\n website: 'https://www.clickviewsupport.com/hc'\n },\n [InstanceRegion.UK]: {\n phone: '+44 (0)333 207 6595',\n email: 'info@clickview.co.uk',\n website: 'https://www.clickviewsupport.com/hc'\n },\n [InstanceRegion.NZ]: {\n phone: '09 916 1156',\n email: 'support@clickview.co.nz',\n website: 'https://www.clickviewsupport.com/hc'\n },\n [InstanceRegion.US]: {\n // PENDING\n phone: '+1 312-292-9322',\n email: 'info@clickvieweducation.com',\n website: 'https://www.clickviewsupport.com/hc'\n }\n};","// extracted by mini-css-extract-plugin\nexport default {\"fileDrop\":\"vdCUc\",\"resourcePreview\":\"tZQbH\"};","import * as React from 'react';\nimport { useDropzone } from 'react-dropzone';\n\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { InteractionType } from 'libs/shared/enums/UploadInteractionType';\n\nimport styles from './file-select.scss';\n\nconst namespace = 'shared.feedbackFileUpload';\n\ninterface FeedbackFileUploadProps {\n onFilesAdded: (files: File[], type?: InteractionType) => void;\n mimeType: string;\n acceptMultiple?: boolean;\n imageUrl?: string;\n uploadError?: string;\n}\n\nexport function FeedbackFileUpload(props: FeedbackFileUploadProps): JSX.Element {\n const { getRootProps, getInputProps, isDragActive } = useDropzone({\n onDrop: (acceptedFiles: File[]) => props.onFilesAdded(acceptedFiles, InteractionType.DragDrop),\n noClick: true,\n noKeyboard: true,\n multiple: !!props.acceptMultiple,\n noDragEventsBubbling: true\n });\n\n const ref = React.useRef<HTMLInputElement>(null);\n const useRef = React.useCallback((node: HTMLInputElement) => {\n if (!node)\n return;\n\n ref.current = node;\n }, []);\n\n const onClick = () => {\n ref.current.value = null;\n ref.current.click();\n };\n\n let className = `${styles.fileDrop} text-center p-2 rounded-1`;\n\n if (props.uploadError)\n className += ' border-red';\n\n if (isDragActive)\n className += ` border-blue bg-light-blue`;\n\n return (\n <>\n <div {...getRootProps({ className })}>\n <img\n className={styles.resourcePreview}\n src={props.imageUrl}\n draggable={false}\n />\n\n <div className='position-relative'>\n {isDragActive &&\n <p className='position-absolute font-size-md translate-middle top-50 start-50 mb-0'>\n <Text namespace={namespace} phrase='dropUpload' />\n </p>}\n\n <div className={isDragActive ? 'opacity-0' : ''}>\n <p className='mb-0'><Text namespace={namespace} phrase='dragDrop' /></p>\n <button\n type='button'\n className='btn btn-link text-underline p-0'\n onClick={onClick}\n >\n <Text namespace={namespace} phrase='upload' />\n </button>\n </div>\n </div>\n\n <input\n type='file'\n name='fileUpload'\n className='file-select d-none'\n multiple={!!props.acceptMultiple}\n accept={props.mimeType}\n ref={useRef}\n onChange={e => props.onFilesAdded([...e.target.files], InteractionType.FileSelect)}\n aria-errormessage='fileUploadError'\n />\n\n <input {...getInputProps()} />\n </div>\n\n {props.uploadError && <FormFeedback name='fileUpload'>{props.uploadError}</FormFeedback>}\n </>\n );\n}\n","// extracted by mini-css-extract-plugin\nexport default {\"progress\":\"PeDF6\"};","import * as React from 'react';\n\nimport { UploadItem } from 'libs/shared/apps/upload/services/UploadService';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\nimport styles from './feedback-upload-list.scss';\n\ninterface FeedbackFileUploadItemProps {\n upload: UploadItem;\n cancelUpload: (id: string) => void;\n}\n\nfunction FeedbackFileUploadItem(props: FeedbackFileUploadItemProps): JSX.Element {\n const finished = props.upload.progress === 100;\n\n return (\n <>\n <div>\n <SvgContainer svgName={cvSvgLibrary.Folder} className='svg-container me-2' />\n <span className='align-middle'>{props.upload.name}</span>\n {finished && (\n <SvgContainer svgName={cvSvgLibrary.Check} className='svg-container float-end text-success' />\n )}\n {!finished &&\n <div\n role='button'\n aria-label='close'\n onClick={() => props.cancelUpload(props.upload.id)}\n className='float-end description'\n >\n <SvgContainer svgName={cvSvgLibrary.Close} />\n </div>\n }\n </div>\n\n <div className={`${styles.progress} progress my-2`}>\n <div\n className='progress-bar bg-blue'\n role='progressbar'\n style={{ width: `${props.upload.progress}%` }}\n aria-valuenow={props.upload.progress}\n aria-valuemin={0} aria-valuemax={100}\n />\n </div>\n </>\n );\n}\n\ninterface FeedbackFileUploadList {\n uploads: UploadItem[];\n cancelUpload: (id: string) => void;\n}\n\nexport function FeedbackFileUploadList(props: FeedbackFileUploadList): JSX.Element {\n if (!props.uploads?.length)\n return <></>;\n\n return (\n <>\n {props.uploads.map((u, idx) => (\n <FeedbackFileUploadItem\n key={idx}\n upload={u}\n cancelUpload={props.cancelUpload}\n />\n ))}\n </>\n );\n}","import React from 'react';\n\nimport { Core } from 'libs/common/backbone/index';\n\nimport { UploadItem } from 'libs/shared/apps/upload/services/UploadService';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\n\ninterface FeedbackUploadedItemProps {\n file: Core.Model;\n deleteFile: (id: string) => void\n}\n\nexport function FeedbackUploadedItem(props: FeedbackUploadedItemProps) {\n return (\n <div className='bg-gray-100 rounded p-2'>\n <SvgContainer className='d-inline-block align-middle svg-container icon-purple me-2' svgName={cvSvgLibrary.FileImg}/>\n \n <span className='align-middle'>{props.file.get('name')}</span>\n\n <button className='btn p-0 border-0 float-end' onClick={() => props.deleteFile(props.file.get('id'))}>\n <SvgContainer svgName={cvSvgLibrary.Delete} />\n </button>\n </div>\n );\n}\n\ninterface FeedbackUploadedListProps {\n uploadedFiles: UploadItem[];\n deleteFile: (id: string) => void\n}\n\nexport function FeedbackUploadedList(props: FeedbackUploadedListProps) {\n return (\n <div className='d-flex flex-column gap-2'>\n {props.uploadedFiles.map(file => (\n <FeedbackUploadedItem key={file.id} file={file} deleteFile={props.deleteFile} />\n ))}\n </div>\n );\n}","import React from 'react';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { UploadItem } from 'libs/shared/apps/upload/services/UploadService';\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { SvgContainer } from 'libs/shared/components/svg-container/SvgContainer';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { CONTACT_SUPPORT_DETAILS } from 'libs/shared/constants/ContactDetails';\nimport { InstanceRegion } from 'libs/shared/enums/InstanceRegion';\nimport { InteractionType } from 'libs/shared/enums/UploadInteractionType';\nimport { cvSvgLibrary } from 'libs/shared/utils/SvgHelper';\nimport { FeedbackFileUpload } from 'libs/shared/views/feedback/components/feedback-file-upload/FeedbackFileUpload';\nimport { FeedbackFileUploadList } from 'libs/shared/views/feedback/components/feedback-upload-list/FeedbackUploadList';\nimport { FeedbackUploadedList } from 'libs/shared/views/feedback/components/feedback-uploaded-list/FeedbackUploadedList';\nimport { FeedbackFormWrapper } from 'libs/shared/views/feedback/components/forms/FeedbackForm';\nimport { FeedbackFormYupString, getFeedbackFormErrorMessage } from 'libs/shared/views/feedback/constants/FeedbackFormValidation';\nimport { FEEDBACK_IMAGE_URLS } from 'libs/shared/views/feedback/constants/FeedbackImageUrls';\nimport { FeedbackFormSharedProps } from 'libs/shared/views/feedback/interfaces/FeedbackForm';\n\nconst namespace = 'shared.feedbackReportBug';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface ReportBugFormValues {\n issue: string;\n stepsToReproduce: string;\n}\n\nexport const INITIAL_VALUES: ReportBugFormValues = {\n issue: '',\n stepsToReproduce: ''\n};\n\nexport const VALIDATION_SCHEMA = Yup.object().shape<ReportBugFormValues>({\n issue: FeedbackFormYupString().required(getFeedbackFormErrorMessage('requiredError')),\n stepsToReproduce: FeedbackFormYupString()\n}).noUnknown();\n\ninterface ReportBugFieldsProps {\n previewImageUrl?: string;\n uploadingFiles: UploadItem[];\n uploadedFiles: UploadItem[];\n uploadError: string;\n instanceRegion: InstanceRegion;\n onFilesAdded?: (files: File[], type?: InteractionType) => void;\n deleteFile: (id: string) => void;\n cancelUpload: (id: string) => void;\n}\n\nexport function ReportBugFields(props: ReportBugFieldsProps) {\n const formikProps = useFormikContextWrapper<ReportBugFormValues>();\n\n return (\n <>\n <div className='form-group'>\n <label className='form-label mb-1'><Text namespace={namespace} phrase='mixedMediaLabel' /></label>\n <p className='text-secondary font-size-sm'><Text namespace={namespace} phrase='mixedMediaDescription' /></p>\n <div className='mb-3'>\n <FeedbackFileUpload\n mimeType={FileExtensions.MIXED_MEDIA}\n onFilesAdded={props.onFilesAdded}\n imageUrl={props.previewImageUrl}\n uploadError={props.uploadError}\n acceptMultiple\n />\n </div>\n\n <FeedbackFileUploadList uploads={props.uploadingFiles} cancelUpload={props.cancelUpload} />\n\n <FeedbackUploadedList uploadedFiles={props.uploadedFiles} deleteFile={props.deleteFile} />\n </div>\n\n <FormField\n as='textarea'\n placeholder={getPhrase('issuePlaceholder')}\n label={getPhrase('issueLabel')}\n name='issue'\n value={formikProps.values.issue}\n showRequiredStar\n />\n\n <FormField\n as='textarea'\n placeholder={getPhrase('stepsPlaceholder')}\n label={getPhrase('stepsLabel')}\n name='stepsToReproduce'\n value={formikProps.values.stepsToReproduce}\n />\n\n <div className='rounded bg-light-yellow p-2 mb-3'>\n <p className='fw-semibold mb-2'><Text namespace={namespace} phrase='help'/></p>\n <div className='d-flex gap-1 mb-2'>\n <SvgContainer svgName={cvSvgLibrary.Link} />\n <a href={CONTACT_SUPPORT_DETAILS[props.instanceRegion].website} target='_blank' className='text-underline' >\n <Text namespace={namespace} phrase='visitHelpCentre' />\n </a>\n </div>\n <p className='mb-2'><Text namespace={namespace} phrase='supportTeam'/></p>\n <div className='d-flex gap-1 mb-2'>\n <SvgContainer svgName={cvSvgLibrary.Phone} />\n <span>{CONTACT_SUPPORT_DETAILS[props.instanceRegion].phone}</span>\n </div>\n <div className='d-flex gap-1 mb-2'>\n <SvgContainer svgName={cvSvgLibrary.Email} />\n <span>{CONTACT_SUPPORT_DETAILS[props.instanceRegion].email}</span>\n </div>\n </div>\n </>\n );\n}\n\nexport type ReportBugProps = ReportBugFieldsProps & FeedbackFormSharedProps;\n\nexport function ReportBug(props: ReportBugProps) {\n const { onFilesAdded, cancelUpload, uploadingFiles, uploadedFiles, deleteFile, ...sharedProps } = props;\n\n return (\n <FeedbackFormWrapper\n {...sharedProps}\n initialValues={{\n ...INITIAL_VALUES,\n ...props.initialValues\n }}\n validationSchema={VALIDATION_SCHEMA}\n submitText={getPhrase('submit')}\n >\n <ReportBugFields\n onFilesAdded={onFilesAdded}\n previewImageUrl={FEEDBACK_IMAGE_URLS.mediaPreview}\n cancelUpload={cancelUpload}\n uploadingFiles={uploadingFiles}\n uploadedFiles={uploadedFiles}\n deleteFile={deleteFile}\n uploadError={props.uploadError}\n instanceRegion={props.instanceRegion}\n />\n </FeedbackFormWrapper>\n );\n}","import React from 'react';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InputToken } from 'libs/shared/apps/share/components/tokenized-typeahead/InputSelection';\nimport { TokenizedTypeahead } from 'libs/shared/apps/share/components/tokenized-typeahead/TokenizedTypeahead';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { getLocalSuggestions, getSuggestionComponent } from 'libs/shared/components/search-bar/SearchUtils';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PresentationAudience } from 'libs/shared/interfaces';\nimport { FeedbackFormWrapper } from 'libs/shared/views/feedback/components/forms/FeedbackForm';\nimport { FEEDBACK_FORM_MAX_CHARACTERS, FeedbackFormYupString, getFeedbackFormErrorMessage } from 'libs/shared/views/feedback/constants/FeedbackFormValidation';\nimport { FeedbackFormSharedProps } from 'libs/shared/views/feedback/interfaces/FeedbackForm';\n\nconst namespace = 'shared.feedbackRequestLivestream';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nexport interface RequestLivestreamFormValues {\n topic: string;\n studentLevel: string[];\n producerCompany: string;\n additionalInfo: string;\n}\n\nexport const INITIAL_VALUES: RequestLivestreamFormValues = {\n topic: '',\n studentLevel: [],\n producerCompany: '',\n additionalInfo: ''\n};\n\nconst REQUEST_LIVESTREAM_YUP_STRING =\n Yup.string().max(FEEDBACK_FORM_MAX_CHARACTERS, getFeedbackFormErrorMessage('maxCharactersError'));\n\nexport const VALIDATION_SCHEMA = Yup.object().shape<RequestLivestreamFormValues>({\n producerCompany: REQUEST_LIVESTREAM_YUP_STRING.required(() => getPhrase('companyError')),\n topic: REQUEST_LIVESTREAM_YUP_STRING,\n studentLevel: Yup.array(Yup.string()),\n additionalInfo: FeedbackFormYupString()\n}).noUnknown();\n\ninterface RequestLivestreamFieldsProps {\n audiences: PresentationAudience[];\n}\n\nexport function RequestLivestreamFields(props: RequestLivestreamFieldsProps) {\n const formikProps = useFormikContextWrapper<RequestLivestreamFormValues>();\n\n const selections =\n formikProps.values.studentLevel.map(\n selected => props.audiences.find(a => a.masterId.toString() === selected.toString())\n ) || [];\n \n function handleSelectAudience(audience: PresentationAudience) {\n formikProps.setFieldValue('studentLevel', ArrayHelper.addOrRemoveImmutable(formikProps.values.studentLevel, audience.masterId.toString()));\n \n requestAnimationFrame(() => formikProps.setFieldTouched('studentLevel'));\n }\n\n function handleLocalSuggestions(query: string, data: PresentationAudience[]) {\n const selectedSuggestion = data.find(suggestion => suggestion.name === query);\n\n const localSuggestions = getLocalSuggestions<PresentationAudience>(\n selectedSuggestion ? '' : query,\n data,\n 'name',\n 0\n );\n\n return localSuggestions.filter(suggestion => {\n if (selections.find(selection => selection.masterId === suggestion.masterId))\n return false;\n\n if (suggestion.masterId === selectedSuggestion?.masterId)\n return false;\n\n return true;\n });\n }\n \n return (\n <>\n <FormField\n placeholder={getPhrase('companyPlaceholder')}\n label={getPhrase('companyLabel')}\n name='producerCompany'\n value={formikProps.values.producerCompany}\n showRequiredStar\n />\n\n <FormField\n placeholder={getPhrase('topicPlaceholder')}\n label={getPhrase('topicLabel')}\n name='topic'\n value={formikProps.values.topic}\n />\n\n <div className='form-group'>\n <label className='form-label'><Text namespace={namespace} phrase='audiencesLabel' /></label>\n <TokenizedTypeahead<PresentationAudience>\n id='audiences'\n placeholder={getPhrase('audiencesPlaceholder')}\n local={props.audiences}\n valueKey='masterId'\n selections={selections}\n onSuggestionSelected={handleSelectAudience}\n removeSelection={selection => handleSelectAudience(selection)}\n errorStateImageUrl={null}\n emptyStateImageUrl={null}\n activationLength={0}\n suggestionLimit={false}\n getInputTokenComponent={(selection: PresentationAudience) => {\n return (\n <InputToken<PresentationAudience>\n key={selection.masterId}\n selection={{ name: selection.name, masterId: selection.masterId }}\n colourVariant='teal'\n onClickRemove={(selection: PresentationAudience) => handleSelectAudience(selection)}\n hideExpander\n />\n );\n }}\n getSuggestionComponent={suggestion => getSuggestionComponent('name', suggestion)}\n onSuggestionDependencies={[ props.audiences, formikProps.values.studentLevel, selections ]}\n getLocalSuggestions={handleLocalSuggestions}\n focusInputOnSuggestionClick={false}\n renderAsForm={false}\n hideIcon\n onBlur={() => formikProps.setFieldTouched('studentLevel')}\n className={`p-2 ${formikProps.touched.studentLevel && formikProps.errors.studentLevel ? 'is-invalid' : ''}`}\n />\n {formikProps.touched.studentLevel && formikProps.errors.studentLevel &&\n <FormFeedback name='audiences'>{formikProps.errors.studentLevel}</FormFeedback>\n }\n </div>\n\n <FormField\n as='textarea'\n placeholder={getPhrase('otherPlaceholder')}\n label={getPhrase('otherLabel')}\n name='additionalInfo'\n value={formikProps.values.additionalInfo}\n />\n </>\n );\n}\n\nexport type RequestLivestreamProps =\n RequestLivestreamFieldsProps &\n FeedbackFormSharedProps\n\nexport function RequestLivestream(props: RequestLivestreamProps) {\n return (\n <FeedbackFormWrapper\n {...props}\n initialValues={{\n ...INITIAL_VALUES,\n ...props.initialValues\n }}\n validationSchema={VALIDATION_SCHEMA}\n >\n <RequestLivestreamFields audiences={props.audiences} />\n </FeedbackFormWrapper>\n );\n}","// extracted by mini-css-extract-plugin\nexport default {\"image\":\"SdHLR\"};","import React from 'react';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { PopupButtons } from 'libs/shared/components/popup/PopupButtons';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FEEDBACK_IMAGE_URLS } from 'libs/shared/views/feedback/constants/FeedbackImageUrls';\nimport { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\n\nimport styles from './before-requesting.scss';\n\nconst namespace = 'shared.feedbackBeforeRequesting';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface BeforeRequestingProps {\n exchangeTvUrl?: string;\n setConfirmed: (checked: boolean) => void;\n setSelectedOption: (option: FeedbackOption) => void;\n}\n\nexport function BeforeRequesting(props: BeforeRequestingProps) {\n const [ checked, setChecked ] = React.useState(false);\n return (\n <>\n <div className='d-flex flex-column align-items-center my-4'>\n <img className={`${styles.image} mb-3`} src={FEEDBACK_IMAGE_URLS.videoAlert} />\n <h4 className='mb-3'>\n <Text namespace={namespace} phrase='beforeRequesting' />\n </h4>\n <p><Text namespace={namespace} phrase='haveYouSearched' options={{ exchangeUrl: `${props.exchangeTvUrl}/exchange` }} /></p>\n </div>\n\n <PopupButtons>\n <PopupButtons.Checkbox\n id='confirmExchange'\n checked={checked}\n onToggle={() => setChecked(!checked)}\n label={getPhrase('exchangeCheck')}\n />\n <PopupButtons.Cancel onClick={() => props.setSelectedOption(null)} text={getPhrase('back')} />\n <PopupButtons.Submit\n variant='dark'\n text={getPhrase('continue')}\n disabled={!checked}\n onClick={() => props.setConfirmed(true)}\n />\n </PopupButtons>\n </>\n );\n}","import React from 'react';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { ArrayHelper } from 'libs/common/react/utils/ArrayHelper';\n\nimport { InputToken } from 'libs/shared/apps/share/components/tokenized-typeahead/InputSelection';\nimport { TokenizedTypeahead } from 'libs/shared/apps/share/components/tokenized-typeahead/TokenizedTypeahead';\nimport { FormFeedback } from 'libs/shared/components/forms/form-feedback/FormFeedback';\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { getLocalSuggestions, getSuggestionComponent } from 'libs/shared/components/search-bar/SearchUtils';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { PresentationAudience } from 'libs/shared/interfaces';\nimport { FeedbackFormWrapper } from 'libs/shared/views/feedback/components/forms/FeedbackForm';\nimport { BeforeRequesting } from 'libs/shared/views/feedback/components/forms/request-video/before-requesting/BeforeRequesting';\nimport { FEEDBACK_FORM_MAX_CHARACTERS, FeedbackFormYupString, getFeedbackFormErrorMessage } from 'libs/shared/views/feedback/constants/FeedbackFormValidation';\nimport { FeedbackFormSharedProps } from 'libs/shared/views/feedback/interfaces/FeedbackForm';\n\nconst namespace = 'shared.feedbackRequestVideo';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nenum VideoRequestType {\n VideosTopic = 'videosTopic',\n VideoOrSeries = 'videoOrSeries'\n}\n\nexport interface RequestVideoFormValues {\n videoRequestType: string;\n topic: string;\n studentLevel: string[];\n videoTitle: string;\n seriesName: string;\n producerCompany: string;\n websiteOrTrailer: string;\n additionalInfo: string;\n}\n\nexport const INITIAL_VALUES: RequestVideoFormValues = {\n videoRequestType: '',\n topic: '',\n studentLevel: [],\n videoTitle: '',\n seriesName: '',\n producerCompany: '',\n websiteOrTrailer: '',\n additionalInfo: ''\n};\n\nconst RequestVideoYupString = () => Yup.string().max(FEEDBACK_FORM_MAX_CHARACTERS, getFeedbackFormErrorMessage('maxCharactersError'));\n\nexport const VALIDATION_SCHEMA = Yup.object().shape<RequestVideoFormValues>({\n videoRequestType: Yup.string().required(getPhrase('videoRequestTypeRequiredError')),\n topic: RequestVideoYupString().when('videoRequestType', {\n is: value => value === VideoRequestType.VideosTopic,\n then: RequestVideoYupString().required(getPhrase('topicRequiredError')),\n otherwise: RequestVideoYupString().notRequired()\n }),\n studentLevel: Yup.array(Yup.string()),\n\n videoTitle: RequestVideoYupString().when([ 'videoRequestType', 'seriesName' ], {\n is: (videoRequestType, seriesName) => videoRequestType === VideoRequestType.VideoOrSeries && !seriesName,\n then: RequestVideoYupString().required((getPhrase('videoRequiredError'))),\n otherwise: RequestVideoYupString().notRequired()\n }),\n seriesName: RequestVideoYupString(),\n producerCompany: RequestVideoYupString(),\n websiteOrTrailer: RequestVideoYupString(),\n additionalInfo: FeedbackFormYupString()\n}).noUnknown();\n\ninterface RequestVideoFieldsProps {\n audiences: PresentationAudience[];\n}\n\nexport function RequestVideoFields(props: RequestVideoFieldsProps) {\n const formikProps = useFormikContextWrapper<RequestVideoFormValues>();\n\n const selections =\n formikProps.values.studentLevel.map(selected => props.audiences?.find(a => +a.masterId === +selected)) || [];\n \n function handleSelectAudience(audience: PresentationAudience) {\n formikProps.setFieldValue('studentLevel', ArrayHelper.addOrRemoveImmutable(formikProps.values.studentLevel, audience.masterId.toString()));\n \n requestAnimationFrame(() => formikProps.setFieldTouched('studentLevel'));\n }\n\n function handleLocalSuggestions(query: string, data: PresentationAudience[]) {\n const selectedSuggestion = data.find(suggestion => suggestion.name === query);\n\n const localSuggestions = getLocalSuggestions<PresentationAudience>(\n selectedSuggestion ? '' : query,\n data,\n 'name',\n 0\n );\n\n return localSuggestions.filter(suggestion => {\n if (selections.find(selection => selection.masterId === suggestion.masterId))\n return false;\n\n if (suggestion.masterId === selectedSuggestion?.masterId)\n return false;\n\n return true;\n });\n }\n \n return (\n <>\n <FormField\n as='select'\n label={getPhrase('videoRequestTypeLabel')}\n name='videoRequestType'\n value={formikProps.values.videoRequestType}\n >\n <option value='' disabled hidden>{getPhrase('videoRequestTypePlaceholder')}</option>\n <option value={VideoRequestType.VideosTopic}>{getPhrase('videosTopicType')}</option>\n <option value={VideoRequestType.VideoOrSeries}>{getPhrase('videoOrSeriesType')}</option>\n </FormField>\n\n {formikProps.values.videoRequestType === VideoRequestType.VideosTopic && (\n <>\n <FormField\n placeholder={getPhrase('videoTopicPlaceholder')}\n label={getPhrase('videoTopicLabel')}\n name='topic'\n value={formikProps.values.topic}\n showRequiredStar\n />\n \n <div className='form-group'>\n <label className='form-label'><Text namespace={namespace} phrase='audiencesLabel' /></label>\n <TokenizedTypeahead<PresentationAudience>\n id='audiences'\n placeholder={getPhrase('audiencesPlaceholder')}\n local={props.audiences}\n valueKey='masterId'\n selections={selections}\n onSuggestionSelected={handleSelectAudience}\n removeSelection={selection => handleSelectAudience(selection)}\n errorStateImageUrl={null}\n emptyStateImageUrl={null}\n activationLength={0}\n suggestionLimit={false}\n getInputTokenComponent={(selection: PresentationAudience) => {\n return (\n <InputToken<PresentationAudience>\n key={selection.masterId}\n selection={{ name: selection.name, masterId: selection.masterId }}\n colourVariant='teal'\n onClickRemove={(selection: PresentationAudience) => handleSelectAudience(selection)}\n hideExpander\n />\n );\n }}\n getSuggestionComponent={suggestion => getSuggestionComponent('name', suggestion)}\n onSuggestionDependencies={[ props.audiences, formikProps.values.studentLevel, selections ]}\n getLocalSuggestions={handleLocalSuggestions}\n focusInputOnSuggestionClick={false}\n renderAsForm={false}\n hideIcon\n onBlur={() => formikProps.setFieldTouched('studentLevel')}\n className={`p-2 ${formikProps.touched.studentLevel && formikProps.errors.studentLevel ? 'is-invalid' : ''}`}\n />\n {formikProps.touched.studentLevel && formikProps.errors.studentLevel\n && <FormFeedback name='audiences'>{formikProps.errors.studentLevel}</FormFeedback>\n }\n </div>\n\n <FormField\n as='textarea'\n placeholder={getPhrase('otherPlaceholder')}\n label={getPhrase('otherLabel')}\n name='additionalInfo'\n value={formikProps.values.additionalInfo}\n />\n </>\n )}\n\n {formikProps.values.videoRequestType === VideoRequestType.VideoOrSeries && (\n <>\n <FormField\n placeholder={getPhrase('videoTitlePlaceholder')}\n label={getPhrase('videoTitleLabel')}\n name='videoTitle'\n value={formikProps.values.videoTitle}\n />\n\n <FormField\n placeholder={getPhrase('seriesPlaceholder')}\n label={getPhrase('seriesLabel')}\n name='seriesName'\n value={formikProps.values.seriesName}\n />\n\n <FormField\n placeholder={getPhrase('companyPlaceholder')}\n label={getPhrase('companyLabel')}\n name='producerCompany'\n value={formikProps.values.producerCompany}\n />\n\n <FormField\n placeholder={getPhrase('videoTopicPlaceholder')}\n label={getPhrase('topicLabel')}\n name='topic'\n value={formikProps.values.topic}\n />\n\n <FormField\n placeholder={getPhrase('websiteOrTrailerPlaceholder')}\n label={getPhrase('websiteOrTrailerLabel')}\n name='websiteOrTrailer'\n value={formikProps.values.websiteOrTrailer}\n />\n\n <FormField\n as='textarea'\n placeholder={getPhrase('otherPlaceholder')}\n label={getPhrase('otherLabel')}\n name='additionalInfo'\n value={formikProps.values.additionalInfo}\n />\n </>\n )}\n </>\n );\n}\n\nexport type RequestVideoProps =\n RequestVideoFieldsProps &\n FeedbackFormSharedProps & {\n hasExchangeTvProduct: boolean;\n exchangeTvUrl: string;\n }\n\nexport function RequestVideo(props: RequestVideoProps) {\n const [ confirmed, setConfirmed ] = React.useState(false);\n\n const showBeforeRequesting = props.hasExchangeTvProduct && !confirmed;\n\n return (\n <FeedbackFormWrapper\n {...props}\n initialValues={{\n ...INITIAL_VALUES,\n ...props.initialValues\n }}\n validationSchema={VALIDATION_SCHEMA}\n hideButtons={props.hasExchangeTvProduct && !confirmed}\n >\n {showBeforeRequesting && (\n <BeforeRequesting\n setConfirmed={setConfirmed}\n setSelectedOption={props.setSelectedOption}\n exchangeTvUrl={props.exchangeTvUrl}\n />\n )}\n\n {!showBeforeRequesting && <RequestVideoFields audiences={props.audiences} />}\n </FeedbackFormWrapper>\n );\n}","import React from 'react';\nimport * as Yup from 'yup';\n\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\n\nimport { FormField } from 'libs/shared/components/forms/form-field/FormField';\nimport { useFormikContextWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { FeedbackFormWrapper } from 'libs/shared/views/feedback/components/forms/FeedbackForm';\nimport { FeedbackFormYupString, getFeedbackFormErrorMessage } from 'libs/shared/views/feedback/constants/FeedbackFormValidation';\nimport { FEEDBACK_IMAGE_URLS } from 'libs/shared/views/feedback/constants/FeedbackImageUrls';\nimport { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\nimport { FeedbackFormSharedProps } from 'libs/shared/views/feedback/interfaces/FeedbackForm';\n\nconst namespace = 'shared.feedbackSuggestImprovement';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\ninterface SuggestImprovementFormValues {\n suggestion: string;\n importance: string;\n}\n\nconst INITIAL_VALUES: SuggestImprovementFormValues = {\n suggestion: '',\n importance: ''\n};\n\nconst VALIDATION_SCHEMA = Yup.object().shape<SuggestImprovementFormValues>({\n suggestion: FeedbackFormYupString().required(getFeedbackFormErrorMessage('requiredError')),\n importance: FeedbackFormYupString()\n}).noUnknown();\n\ninterface SuggestImprovementFieldsProps {\n setSelectedOption: (option: FeedbackOption) => void;\n}\n\nfunction SuggestImprovementFields(props: SuggestImprovementFieldsProps) {\n const formikProps = useFormikContextWrapper<SuggestImprovementFormValues>();\n\n return (\n <>\n <FormField\n as='textarea'\n placeholder={getPhrase('suggestionPlaceholder')}\n label={getPhrase('suggestionLabel')}\n name='suggestion'\n value={formikProps.values.suggestion}\n showRequiredStar\n />\n\n <FormField\n as='textarea'\n placeholder={getPhrase('whySuggestionPlaceholder')}\n label={getPhrase('whySuggestionLabel')}\n name='importance'\n rows={5}\n value={formikProps.values.importance}\n />\n\n <p>\n <Text namespace={namespace} phrase={'contactSupport'} />\n \n <button\n className='btn btn-link text-underline p-0'\n onClick={() => props.setSelectedOption(FeedbackOption.RAISE_ISSUE)}>\n <Text namespace={namespace} phrase='raiseIssue' />\n </button>\n </p>\n </>\n );\n}\n\nexport function SuggestImprovement(props: FeedbackFormSharedProps) {\n return (\n <FeedbackFormWrapper\n {...props}\n initialValues={{\n ...INITIAL_VALUES,\n ...props.initialValues\n }}\n validationSchema={VALIDATION_SCHEMA}\n successImageUrl={FEEDBACK_IMAGE_URLS.lightBulb}\n successHeading={getPhrase('successHeading')}\n successDescription={getPhrase('successDescription')}\n >\n <SuggestImprovementFields setSelectedOption={props.setSelectedOption} />\n </FeedbackFormWrapper>\n );\n}","import React from 'react';\nimport { Form } from 'formik';\n\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { FormWrapper } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { FeedbackButtons } from 'libs/shared/views/feedback/components/feedback-buttons/FeedbackButtons';\nimport { FeedbackFormState } from 'libs/shared/views/feedback/components/feedback-form-state/FeedbackFormState';\nimport { GivePraise } from 'libs/shared/views/feedback/components/forms/give-praise/GivePraise';\nimport { Other } from 'libs/shared/views/feedback/components/forms/other/Other';\nimport { RaiseIssue } from 'libs/shared/views/feedback/components/forms/raise-issue/RaiseIssue';\nimport { ReportBug } from 'libs/shared/views/feedback/components/forms/report-bug/ReportBug';\nimport { RequestLivestream } from 'libs/shared/views/feedback/components/forms/request-livestream/RequestLivestream';\nimport { RequestVideo } from 'libs/shared/views/feedback/components/forms/request-video/RequestVideo';\nimport { SuggestImprovement } from 'libs/shared/views/feedback/components/forms/suggest-improvement/SuggestImprovement';\nimport { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\nimport { FeedbackFormCustomProps, FeedbackFormSharedProps } from 'libs/shared/views/feedback/interfaces/FeedbackForm';\n\ninterface FeedbackFormWrapperProps extends React.PropsWithChildren, FeedbackFormSharedProps {\n validationSchema: any;\n submitText?: string;\n successImageUrl?: string;\n successHeading?: string;\n successDescription?: string;\n hideButtons?: boolean;\n}\n\nexport function FeedbackFormWrapper(props: FeedbackFormWrapperProps) {\n const ref = React.useRef(null);\n\n function setSelectedOption(selectedOption: FeedbackOption) {\n props.setFormState((prevState: HashObject) => ({ ...prevState, ...ref.current?.values }));\n props.setSelectedOption(selectedOption);\n }\n\n return (\n <FormWrapper\n onSubmit={props.onSubmit}\n initialValues={props.initialValues}\n validationSchema={props.validationSchema}\n validateOnMount\n innerRef={ref}\n >\n <Form>\n {props.formStage === 'form' && props.children}\n\n <FeedbackFormState\n formStage={props.formStage}\n successImageUrl={props.successImageUrl}\n successHeading={props.successHeading}\n successDescription={props.successDescription}\n />\n\n {!props.hideButtons && (\n <FeedbackButtons\n setSelectedOption={setSelectedOption}\n submitText={props.submitText}\n formStage={props.formStage}\n closePopup={props.closePopup}\n />\n )}\n </Form>\n </FormWrapper>\n );\n}\n\ninterface FeedbackFormSelectorProps {\n selectedOption: FeedbackOption;\n}\n\ntype FeedbackFormProps = FeedbackFormSharedProps & FeedbackFormSelectorProps & FeedbackFormCustomProps;\n\nexport function FeedbackForm(props: FeedbackFormProps) {\n const formProps = {\n formStage: props.formStage,\n initialValues: props.initialValues,\n setFormState: props.setFormState,\n onSubmit: props.onSubmit,\n setSelectedOption: props.setSelectedOption,\n closePopup: props.closePopup\n };\n\n switch (props.selectedOption) {\n case FeedbackOption.SUGGEST_IMPROVEMENT:\n return <SuggestImprovement {...formProps} />;\n case FeedbackOption.REPORT_BUG:\n return (\n <ReportBug\n {...formProps}\n onFilesAdded={props.onFilesAdded}\n cancelUpload={props.cancelUpload}\n uploadingFiles={props.uploadingFiles}\n uploadedFiles={props.uploadedFiles}\n deleteFile={props.deleteFile}\n uploadError={props.uploadError}\n instanceRegion={props.instanceRegion}\n />\n );\n case FeedbackOption.REQUEST_VIDEO:\n return (\n <RequestVideo\n {...formProps}\n audiences={props.audiences}\n hasExchangeTvProduct={props.hasExchangeTvProduct}\n exchangeTvUrl={props.exchangeTvUrl}\n />\n );\n case FeedbackOption.REQUEST_LIVESTREAM:\n return (\n <RequestLivestream\n {...formProps}\n audiences={props.audiences}\n />\n );\n case FeedbackOption.RAISE_ISSUE:\n return <RaiseIssue {...formProps} />;\n case FeedbackOption.GIVE_PRAISE:\n return <GivePraise {...formProps} />;\n case FeedbackOption.OTHER:\n return <Other {...formProps} />;\n }\n}","import React from 'react';\nimport { Radio } from 'backbone';\nimport Dropzone from 'dropzone';\n\nimport { LocationUtils } from 'libs/common/backbone/core';\nimport { Core } from 'libs/common/backbone/index';\nimport { LanguageService } from 'libs/common/backbone/services/LanguageService';\nimport { useGetFetchAsync } from 'libs/common/react/flight';\nimport { useService } from 'libs/common/react/hooks/UseService';\nimport { Flight } from 'libs/common/react/index';\nimport { HashObject } from 'libs/common/react/interfaces';\n\nimport { AnalyticsHelper } from 'libs/analytics/AnalyticsHelper';\nimport { EntityType, LocationContext, UserAction, WorkflowPhase } from 'libs/analytics/interfaces';\n\nimport { UploadEventNames } from 'libs/shared/apps/upload/constants/UploadConstants';\nimport { MixedMediaUploadService, UploadItem } from 'libs/shared/apps/upload/services/UploadService';\nimport { FileExtensions } from 'libs/shared/apps/upload/utils/FileExtensionsHelper';\nimport { FormSubmissionOptions } from 'libs/shared/components/forms/form-wrapper/FormWrapper';\nimport { Popup, PopupProps } from 'libs/shared/components/popup/Popup';\nimport { Text } from 'libs/shared/components/text/Text';\nimport { SharedServiceChannels } from 'libs/shared/constants/RadioChannels';\nimport { SharedServices } from 'libs/shared/constants/SharedServices';\nimport { FeedbackType } from 'libs/shared/enums/FeedbackType';\nimport { PresentationType } from 'libs/shared/enums/PresentationType';\nimport { ProductId } from 'libs/shared/enums/ProductId';\nimport { InteractionType } from 'libs/shared/enums/UploadInteractionType';\nimport { AudienceRequests } from 'libs/shared/flight-requests/AudienceRequests';\nimport { ClassificationRequests } from 'libs/shared/flight-requests/ClassificationRequests';\nimport { CustomerRequests } from 'libs/shared/flight-requests/CustomerRequests';\nimport { FeedbackRequests } from 'libs/shared/flight-requests/FeedbackRequests';\nimport { ProductRequests } from 'libs/shared/flight-requests/ProductRequests';\nimport { UserRequests } from 'libs/shared/flight-requests/UserRequests';\nimport { useAlerts } from 'libs/shared/hooks/UseAlerts';\nimport { useGetCollectionItems } from 'libs/shared/hooks/UseGetCollectionItems';\nimport { useListenOn } from 'libs/shared/hooks/UseListenOn';\nimport { CurrentUser, Customer, FileUpload, Presentation, PresentationAudience, Product, User } from 'libs/shared/interfaces';\nimport { FeedbackFormRequest } from 'libs/shared/interfaces/requests/FeedbackFormRequest';\nimport { FeedbackFormHelper } from 'libs/shared/utils/FeedbackFormHelper';\nimport { FeedbackSelector } from 'libs/shared/views/feedback/components/feedback-selector/FeedbackSelector';\nimport { FeedbackForm } from 'libs/shared/views/feedback/components/forms/FeedbackForm';\nimport { getFeedbackFormTitles } from 'libs/shared/views/feedback/constants/FeedbackFormTitles';\nimport { FeedbackOption } from 'libs/shared/views/feedback/enums/FeedbackOption';\nimport { FeedbackFormStage } from 'libs/shared/views/feedback/interfaces/FeedbackForm';\nconst namespace = 'shared.giveFeedback';\nconst getPhrase = LanguageService.encloseNamespace(namespace);\n\nconst MAX_FILES_LIMIT = 5;\nconst MAX_FILE_SIZE_LIMIT = 60; // MB\nconst BYTES_MULTIPLIER = 1000000;\n\ninterface GiveFeedbackViewProps extends PopupProps {\n product: ProductId\n}\n\nexport function GiveFeedbackView(props: GiveFeedbackViewProps) {\n const alerts = useAlerts();\n const fetchAsync = useGetFetchAsync();\n\n const currentUser = Flight.useBasicFetch<CurrentUser>(UserRequests.currentUser());\n const customer = Flight.useBasicFetch<Customer>(currentUser.data &&\n CustomerRequests.customer(currentUser.data.customerId));\n const masterUser = Flight.useBasicFetch<User>(currentUser.data && UserRequests.user(currentUser.data.id));\n\n const [ selectedOption, setSelectedOption ] = React.useState<FeedbackOption>(null);\n const [ formStage, setFormStage ] = React.useState<FeedbackFormStage>('form');\n const [ formState, setFormState ] = React.useState<HashObject>(null);\n\n const mixedMediaUploadService = useService<MixedMediaUploadService>(SharedServices.MixedMediaUpload);\n const mixedMediaUploads = useGetCollectionItems<UploadItem>(() => mixedMediaUploadService.getCollection(), null);\n\n const interactionTypeRef = React.useRef<InteractionType>();\n const mixedMediaUploadCountRef = React.useRef(0);\n const mixedMediaUploadsRef = React.useRef<FileUpload[]>([]);\n\n const [ uploadedFiles, setUploadedFiles ] = React.useState<UploadItem[]>([]);\n const [ uploadError, setUploadError ] = React.useState<string>('');\n \n const presentationType = props.product === ProductId.StreamableLearning\n ? PresentationType.StreamableLearning : PresentationType.Subject;\n const presentation = Flight.useBasicFetch<Presentation>(ClassificationRequests.presentation(presentationType));\n const audiences = Flight.useBasicFetch<PresentationAudience[]>(\n AudienceRequests.presentationAudiences(null, presentationType)\n );\n\n const products = Flight.useBasicFetch<Product[]>(ProductRequests.userProducts());\n\n const exchangeTvProduct = products.data?.find(product => product.id === ProductId.Exchange);\n\n useListenOn(\n Radio.channel(SharedServiceChannels.MIXED_MEDIA_UPLOAD),\n UploadEventNames.UPLOAD_COMPLETE,\n onMixedMediaUploadComplete\n );\n\n function addMixedMediaFiles(files: File[], type?: InteractionType): void {\n if (files.some(file => file.size > MAX_FILE_SIZE_LIMIT * BYTES_MULTIPLIER)) {\n setUploadError(getPhrase('maxFileSizeUploadError', { limit: MAX_FILE_SIZE_LIMIT }));\n return;\n }\n\n if (files.length > (MAX_FILES_LIMIT - mixedMediaUploads.length)) {\n setUploadError(getPhrase('maxFilesUploadError', { limit: MAX_FILES_LIMIT }));\n return;\n }\n \n if (files.some(file => !Dropzone.isValidFile(file, FileExtensions.MIXED_MEDIA))) {\n setUploadError(getPhrase('invalidTypeUploadError'));\n return;\n }\n\n setUploadError('');\n \n mixedMediaUploadCountRef.current += files.length;\n\n if (type)\n interactionTypeRef.current = type;\n\n mixedMediaUploadService.addFiles(files);\n }\n\n function onMixedMediaUploadComplete(upload: Core.Model): void {\n const uploadData: FileUpload = upload.toJSON();\n\n mixedMediaUploadsRef.current.push(uploadData);\n mixedMediaUploadCountRef.current--;\n\n if (mixedMediaUploadCountRef.current > 0)\n return;\n\n // The below will only run once all media files have been uploaded.\n let mixedMediaToUpload = mixedMediaUploadsRef.current.length;\n\n // const onError = () => console.log('mixedMedia upload error');\n\n mixedMediaUploadsRef.current.forEach(mixedMedia => {\n // setTimeout is required to detect changes correctly when files are removed from the uploading list in the backbone collection\n setTimeout(() => {\n mixedMediaToUpload--;\n \n const uploadedMedia = mixedMediaUploadService.getCollection().filter(r => r.get('fileInfo')?.id === mixedMedia.fileInfo.id);\n\n mixedMediaUploadService.getCollection().remove(uploadedMedia);\n setUploadedFiles(prevState => ([ ...prevState, ...uploadedMedia ]));\n\n if (mixedMediaToUpload > 0)\n return;\n\n AnalyticsHelper.logUserAction(\n { fileInfo: mixedMedia.fileInfo },\n {\n location: LocationContext.GiveFeedbackPopup,\n actionType: UserAction.Upload,\n entity: EntityType.MixedMedia,\n descriptor: AnalyticsHelper.mapInteractionType(interactionTypeRef.current)\n }\n );\n\n alerts.success(getPhrase('mixedMediaUploadSuccess'));\n });\n });\n\n mixedMediaUploadsRef.current = [];\n }\n\n function onDeleteFile(id: string) {\n setUploadedFiles(prevState => prevState.filter(file => file.id !== id));\n }\n\n function onFormSelect(option: FeedbackOption) {\n setSelectedOption(option);\n\n if (option)\n AnalyticsHelper.logUserAction(\n { type: option },\n {\n actionType: UserAction.Click,\n entity: EntityType.Feedback,\n location: LocationContext.GiveFeedbackPopup,\n workflowPhase: WorkflowPhase.Start\n }\n );\n }\n\n function getFeedbackType(option: FeedbackOption) {\n switch (option) {\n case FeedbackOption.SUGGEST_IMPROVEMENT: return FeedbackType.SuggestImprovement;\n case FeedbackOption.REPORT_BUG: return FeedbackType.ReportBug;\n case FeedbackOption.REQUEST_VIDEO: return FeedbackType.RequestVideo;\n case FeedbackOption.REQUEST_LIVESTREAM: return FeedbackType.RequestLivestream;\n case FeedbackOption.GIVE_PRAISE: return FeedbackType.GivePraise;\n case FeedbackOption.RAISE_ISSUE: return FeedbackType.RaiseIssue;\n case FeedbackOption.OTHER: return FeedbackType.Other;\n }\n }\n\n async function onSubmit(values: any, onDone: (options?: FormSubmissionOptions) => void) {\n const feedbackFormRequestData: FeedbackFormRequest = {\n type: getFeedbackType(selectedOption),\n user: FeedbackFormHelper.getUserInfo(currentUser.data, customer.data),\n tags: FeedbackFormHelper.getTags(\n currentUser.data,\n props.product,\n false,\n [\n 'give feedback',\n getFeedbackFormTitles(selectedOption).toLowerCase(),\n presentation.data?.description?.toLowerCase().trim(),\n masterUser.data?.userProfile?.metadata?.jobTitle?.toLowerCase()\n ].filter(Boolean)\n )\n };\n\n let feedbackFormValues = {\n ...values,\n currentPageUrl: LocationUtils.GetCurrentUrl()\n };\n \n\n if (selectedOption === FeedbackOption.REPORT_BUG && uploadedFiles.length) {\n feedbackFormValues = {\n ...feedbackFormValues,\n ...FeedbackFormHelper.categorizeFiles(uploadedFiles)\n };\n }\n\n try {\n await fetchAsync(FeedbackRequests.submitFeedback(feedbackFormRequestData, feedbackFormValues));\n\n AnalyticsHelper.logUserAction(\n {\n ...feedbackFormRequestData,\n ...feedbackFormValues\n },\n {\n actionType: UserAction.Submit,\n entity: EntityType.Feedback,\n location: LocationContext.GiveFeedbackPopup,\n workflowPhase: WorkflowPhase.Complete\n }\n );\n\n setFormStage('success');\n } catch {\n alerts.error(getPhrase('error'));\n } finally {\n onDone();\n }\n }\n\n return (\n <Popup\n size='lg'\n title={selectedOption ? getFeedbackFormTitles(selectedOption) : getPhrase('title')}\n closePopup={props.closePopup}\n backdrop='static'\n >\n {!selectedOption && <p><Text namespace={namespace} phrase='description' /></p>}\n\n {!selectedOption && (\n <FeedbackSelector\n onSelectOption={onFormSelect}\n options={[\n FeedbackOption.SUGGEST_IMPROVEMENT,\n FeedbackOption.REPORT_BUG,\n props.product === ProductId.StreamableLearning\n ? FeedbackOption.REQUEST_LIVESTREAM\n : FeedbackOption.REQUEST_VIDEO,\n FeedbackOption.GIVE_PRAISE,\n FeedbackOption.RAISE_ISSUE,\n FeedbackOption.OTHER\n ]}\n />\n )}\n\n {selectedOption && (\n <FeedbackForm\n selectedOption={selectedOption}\n formStage={formStage}\n onSubmit={onSubmit}\n setSelectedOption={onFormSelect}\n closePopup={props.closePopup}\n onFilesAdded={addMixedMediaFiles}\n uploadingFiles={mixedMediaUploads}\n uploadedFiles={uploadedFiles}\n deleteFile={onDeleteFile}\n cancelUpload={(id: string) => mixedMediaUploadService.cancelUpload(id)}\n audiences={audiences.data}\n uploadError={uploadError}\n initialValues={formState}\n setFormState={setFormState}\n instanceRegion={currentUser.data?.instanceRegion}\n hasExchangeTvProduct={!!exchangeTvProduct}\n exchangeTvUrl={exchangeTvProduct?.url}\n />\n )}\n </Popup>\n );\n}"],"names":["pdfExtensions","docExtensions","textExtensions","excelExtensions","imageExtensions","videoMimeType","archiveExtensions","powerPointExtensions","subtitleExtensions","FileExtensions","IMAGES","join","VIDEO","MIXED_MEDIA","RESOURCES","SUBTITLES","FileExtensionHelper","getResourceType","extension","ext","toLowerCase","FormFeedback","props","id","name","className","role","children","FormCheckbox","label","checkboxLabelClassName","checkboxLabelFontWeight","fieldProps","Form","FieldWrapper","htmlFor","checkboxAppLink","checkboxAppLinkText","AppLink","appLink","CharacterCounter","field","values","fieldName","length","limit","namespace","showLoadingSpinner","type","setType","resolvedChildren","FunctionHelper","f","ObjectHelper","Spinner","animation","size","containerClassName","disabled","SvgContainer","svgName","onClick","FormField","showCharacterCounter","showRequiredStar","infoTooltip","infoTooltipPlacement","infoText","formSize","showOptionalLabel","errors","touched","disabledOnChange","_props","onChange","fieldWrapperProps","FormHelper","as","title","tooltipPlacement","tooltipSpanHack","Text","phrase","maxLength","errorMessage","defaultProps","autoComplete","FormWrapper","castInitialValues","castValuesOnSubmit","initialValues","onSubmit","formikProps","formattedInitialValues","validationSchema","cast","omitChildValues","child","Object","keys","forEach","key","hasOwnProperty","omitNullInitialValues","initialStatus","allowInitialSubmit","enableReinitialize","setSubmitting","resetForm","setFieldError","formattedData","options","reset","entries","value","useFormikContextWrapper","FeedbackType","InteractionType","FeedbackRequests","submitFeedback","requestData","formValues","url","data","useGetCollectionItems","getCollection","onRemove","dependencies","setUpdate","collection","off","on","s","toJSON","FeedbackFormHelper","getUserInfo","currentUser","customer","username","email","userType","customerId","cvcId","crmId","customerName","instanceRegion","contentRegion","firstName","givenName","lastName","familyName","mapInstanceRegionToTag","getTags","product","hasStudentExperience","extraTags","tags","push","regionTag","categorizeFiles","files","reduce","result","file","fileInfo","get","videoUrls","imageUrls","getCustomFormControlClassName","attribute","additionalClassName","getTypeSize","FeedbackOption","getPhrase","LanguageService","getFeedbackFormTitles","feedbackOption","SUGGEST_IMPROVEMENT","REPORT_BUG","REQUEST_VIDEO","REQUEST_LIVESTREAM","GIVE_PRAISE","RAISE_ISSUE","OTHER","FEEDBACK_IMAGE_URLS","mailSent","mediaPreview","lightBulb","heartHands","videoAlert","default","hover","FeedbackSelectorOption","ref","isHovering","feedbackImage","option","DivButton","onSelectOption","src","alt","FeedbackSelector","map","FeedbackButtons","PopupButtons","formStage","setSelectedOption","text","variant","submitText","isValid","closePopup","FeedbackFormState","successImageUrl","successHeading","successDescription","FEEDBACK_FORM_MAX_CHARACTERS","getFeedbackFormErrorMessage","FeedbackFormYupString","min","max","INITIAL_VALUES","praise","VALIDATION_SCHEMA","shape","required","noUnknown","GivePraiseFields","placeholder","rows","GivePraise","FeedbackFormWrapper","feedback","OtherFields","Other","issue","RaiseIssueFields","RaiseIssue","CONTACT_SUPPORT_DETAILS","InstanceRegion","phone","website","FeedbackFileUpload","onDrop","acceptedFiles","onFilesAdded","noClick","noKeyboard","multiple","acceptMultiple","noDragEventsBubbling","getRootProps","getInputProps","isDragActive","useRef","node","current","uploadError","imageUrl","draggable","click","accept","mimeType","e","target","FeedbackFileUploadItem","finished","upload","progress","cancelUpload","style","width","FeedbackFileUploadList","uploads","u","idx","FeedbackUploadedItem","deleteFile","FeedbackUploadedList","uploadedFiles","stepsToReproduce","ReportBugFields","previewImageUrl","uploadingFiles","href","ReportBug","sharedProps","topic","studentLevel","producerCompany","additionalInfo","REQUEST_LIVESTREAM_YUP_STRING","RequestLivestreamFields","selections","selected","audiences","find","a","masterId","toString","handleSelectAudience","audience","setFieldValue","ArrayHelper","requestAnimationFrame","setFieldTouched","TokenizedTypeahead","local","valueKey","onSuggestionSelected","removeSelection","selection","errorStateImageUrl","emptyStateImageUrl","activationLength","suggestionLimit","getInputTokenComponent","colourVariant","onClickRemove","hideExpander","getSuggestionComponent","suggestion","onSuggestionDependencies","getLocalSuggestions","query","selectedSuggestion","filter","focusInputOnSuggestionClick","renderAsForm","hideIcon","onBlur","RequestLivestream","BeforeRequesting","checked","setChecked","exchangeUrl","exchangeTvUrl","onToggle","setConfirmed","VideoRequestType","videoRequestType","videoTitle","seriesName","websiteOrTrailer","RequestVideoYupString","when","is","VideosTopic","then","otherwise","notRequired","VideoOrSeries","RequestVideoFields","hidden","RequestVideo","confirmed","showBeforeRequesting","hasExchangeTvProduct","hideButtons","importance","SuggestImprovementFields","SuggestImprovement","validateOnMount","innerRef","selectedOption","setFormState","prevState","FeedbackForm","formProps","MAX_FILES_LIMIT","MAX_FILE_SIZE_LIMIT","BYTES_MULTIPLIER","GiveFeedbackView","alerts","fetchAsync","useGetFetchAsync","UserRequests","CustomerRequests","masterUser","setFormStage","formState","mixedMediaUploadService","SharedServices","mixedMediaUploads","interactionTypeRef","mixedMediaUploadCountRef","mixedMediaUploadsRef","setUploadedFiles","setUploadError","presentationType","ProductId","PresentationType","presentation","ClassificationRequests","AudienceRequests","exchangeTvProduct","ProductRequests","onFormSelect","AnalyticsHelper","actionType","entity","location","workflowPhase","getFeedbackType","Radio","uploadData","mixedMediaToUpload","mixedMedia","setTimeout","uploadedMedia","r","remove","descriptor","success","Popup","backdrop","onDone","feedbackFormRequestData","user","description","trim","userProfile","metadata","jobTitle","Boolean","feedbackFormValues","currentPageUrl","error","some","addFiles"],"sourceRoot":""}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
/package/dist/scripts/{bundle-507079f8c6.min.js.LICENSE.txt → bundle-3908df5fdf.min.js.LICENSE.txt}
RENAMED
|
File without changes
|