@openedx/frontend-base 1.0.1 → 2.0.0-alpha.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/README.md +1 -1
- package/dist/runtime/config/index.js.map +1 -1
- package/dist/runtime/i18n/index.d.ts +26 -3
- package/dist/runtime/i18n/index.js +2 -53
- package/dist/runtime/i18n/index.js.map +1 -1
- package/dist/runtime/i18n/lib.d.ts +0 -12
- package/dist/runtime/i18n/lib.js +0 -12
- package/dist/runtime/i18n/lib.js.map +1 -1
- package/dist/runtime/index.d.ts +1 -1
- package/dist/runtime/index.js +1 -1
- package/dist/runtime/index.js.map +1 -1
- package/dist/runtime/jest.config.js +1 -1
- package/dist/runtime/jest.config.js.map +1 -1
- package/dist/runtime/logging/types.js.map +1 -1
- package/dist/runtime/react/CombinedAppProvider.js.map +1 -1
- package/dist/runtime/react/CurrentAppContext.js.map +1 -1
- package/dist/runtime/react/CurrentAppProvider.js.map +1 -1
- package/dist/runtime/react/SiteContext.js.map +1 -1
- package/dist/runtime/react/SiteProvider.js.map +1 -1
- package/dist/runtime/react/hooks/theme/useThemeVariants.js.map +1 -1
- package/dist/runtime/slots/Slot.js.map +1 -1
- package/dist/runtime/slots/SlotContext.js.map +1 -1
- package/dist/runtime/slots/layout/types.js.map +1 -1
- package/dist/runtime/slots/types.js.map +1 -1
- package/dist/runtime/slots/widget/WidgetContext.js.map +1 -1
- package/dist/runtime/slots/widget/WidgetProvider.js.map +1 -1
- package/dist/runtime/slots/widget/iframe/IFrameContentWrapper.js.map +1 -1
- package/dist/runtime/slots/widget/iframe/IFrameWidget.js.map +1 -1
- package/dist/runtime/slots/widget/iframe/hooks.js.map +1 -1
- package/dist/runtime/slots/widget/iframe/types.js.map +1 -1
- package/dist/runtime/slots/widget/types.js.map +1 -1
- package/dist/runtime/testing/initializeMockApp.js.map +1 -1
- package/dist/shell/Logo.js.map +1 -1
- package/dist/shell/dev/devHeader/BarContext.js.map +1 -1
- package/dist/shell/dev/devHeader/BarProvider.js.map +1 -1
- package/dist/shell/dev/devHeader/FooContext.js.map +1 -1
- package/dist/shell/dev/devHeader/FooProvider.js.map +1 -1
- package/dist/shell/dev/slotShowcase/SlotShowcasePage.js.map +1 -1
- package/dist/shell/dev/slotShowcase/app.js.map +1 -1
- package/dist/shell/footer/CopyrightNotice.js.map +1 -1
- package/dist/shell/footer/LanguageMenuItem.js.map +1 -1
- package/dist/shell/header/AuthenticatedMenu.js.map +1 -1
- package/dist/shell/header/HelpButton.js.map +1 -1
- package/dist/shell/header/anonymous-menu/AnonymousMenu.js.map +1 -1
- package/dist/shell/header/course-bar/data/service.js.map +1 -1
- package/dist/shell/header/course-bar/masquerade/StudioLink.js.map +1 -1
- package/dist/shell/header/course-bar/masquerade/data/api.js.map +1 -1
- package/dist/shell/header/course-bar/masquerade/hooks.js.map +1 -1
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/MasqueradeUserNameInput.js.map +1 -1
- package/dist/shell/header/course-bar/masquerade/masquerade-widget/MasqueradeWidgetOption.js.map +1 -1
- package/dist/shell/header/course-bar/navigation/CourseTabsNavigation.js.map +1 -1
- package/dist/shell/header/helpButtonSlotOperation.js.map +1 -1
- package/dist/shell/jest.config.js +1 -1
- package/dist/shell/jest.config.js.map +1 -1
- package/dist/shell/menus/LinkMenuItem.js.map +1 -1
- package/dist/shell/menus/NavDropdownMenuSlot.js.map +1 -1
- package/dist/shell/menus/ProfileLinkMenuItem.js.map +1 -1
- package/dist/tools/eslint/base.eslint.config.js +2 -2
- package/dist/tools/jest/jest.config.js +1 -1
- package/dist/tools/jest.config.js +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +3 -3
- package/dist/runtime/i18n/injectIntlWithShim.d.ts +0 -11
- package/dist/runtime/i18n/injectIntlWithShim.js +0 -45
- package/dist/runtime/i18n/injectIntlWithShim.js.map +0 -1
package/dist/shell/header/course-bar/masquerade/masquerade-widget/MasqueradeUserNameInput.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MasqueradeUserNameInput.js","sourceRoot":"","sources":["../../../../../../shell/header/course-bar/masquerade/masquerade-widget/MasqueradeUserNameInput.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EACL,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,GAC7C,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAQlC,MAAM,UAAU,uBAAuB,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAS;IACzE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EACJ,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,GACpD,GAAG,oBAAoB,EAAE,CAAC;IAE3B,MAAM,YAAY,GAAG,CAAC,KAAiC,EAAE,EAAE;QACzD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,cAAc,EAAE,CAAC;IACnB,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,IAAI,IAAC,SAAS,EAAE,6BAA6B,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,YAAY,aACrF,KAAC,SAAS,IAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAC,uBAAuB,YACzD,KAAC,WAAW,IACV,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,KAA0C,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GACzF,GACQ,EACZ,KAAC,cAAc,IACb,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,OAAO,EACf,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAC3C,QAAQ,EAAE,CAAC,QAAQ,EACnB,MAAM,EAAE;oBACN,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACvC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC;iBAC5C,GACD,IACG,CACR,CAAC;AACJ,CAAC","sourcesContent":["import { FormEvent } from 'react';\nimport { useIntl } from '@openedx/frontend-base';\nimport {\n Form, FormControl, FormGroup, StatefulButton,\n} from '@openedx/paragon';\n\nimport { useMasqueradeContext } from '../MasqueradeContext';\nimport messages from './messages';\n\ninterface Props {\n id?: string
|
|
1
|
+
{"version":3,"file":"MasqueradeUserNameInput.js","sourceRoot":"","sources":["../../../../../../shell/header/course-bar/masquerade/masquerade-widget/MasqueradeUserNameInput.tsx"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EACL,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,cAAc,GAC7C,MAAM,kBAAkB,CAAC;AAE1B,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,QAAQ,MAAM,YAAY,CAAC;AAQlC,MAAM,UAAU,uBAAuB,CAAC,EAAE,EAAE,EAAE,SAAS,EAAE,SAAS,EAAS;IACzE,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,EAAE,CAAC;IACpC,MAAM,EACJ,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,YAAY,GACpD,GAAG,oBAAoB,EAAE,CAAC;IAE3B,MAAM,YAAY,GAAG,CAAC,KAAiC,EAAE,EAAE;QACzD,KAAK,CAAC,cAAc,EAAE,CAAC;QACvB,cAAc,EAAE,CAAC;IACnB,CAAC,CAAC;IAEF,OAAO,CACL,MAAC,IAAI,IAAC,SAAS,EAAE,6BAA6B,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,EAAE,EAAE,QAAQ,EAAE,YAAY,aACrF,KAAC,SAAS,IAAC,SAAS,EAAE,EAAE,EAAE,SAAS,EAAC,uBAAuB,YACzD,KAAC,WAAW,IACV,SAAS,EAAE,SAAS,EACpB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,CAAC,KAA0C,EAAE,EAAE,CAAC,WAAW,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,GACzF,GACQ,EACZ,KAAC,cAAc,IACb,IAAI,EAAC,QAAQ,EACb,OAAO,EAAC,OAAO,EACf,KAAK,EAAE,YAAY,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAC3C,QAAQ,EAAE,CAAC,QAAQ,EACnB,MAAM,EAAE;oBACN,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC;oBACvC,OAAO,EAAE,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC;iBAC5C,GACD,IACG,CACR,CAAC;AACJ,CAAC","sourcesContent":["import { FormEvent } from 'react';\nimport { useIntl } from '@openedx/frontend-base';\nimport {\n Form, FormControl, FormGroup, StatefulButton,\n} from '@openedx/paragon';\n\nimport { useMasqueradeContext } from '../MasqueradeContext';\nimport messages from './messages';\n\ninterface Props {\n id?: string;\n className?: string;\n autoFocus?: boolean;\n}\n\nexport function MasqueradeUserNameInput({ id, className, autoFocus }: Props) {\n const { formatMessage } = useIntl();\n const {\n userName, setUserName, submitUserName, isSubmitting,\n } = useMasqueradeContext();\n\n const handleSubmit = (event: FormEvent<HTMLFormElement>) => {\n event.preventDefault();\n submitUserName();\n };\n\n return (\n <Form className={`d-flex align-items-center ${className ?? ''}`} onSubmit={handleSubmit}>\n <FormGroup controlId={id} className=\"flex-grow-1 mb-0 mr-2\">\n <FormControl\n autoFocus={autoFocus}\n value={userName}\n onChange={(event: React.ChangeEvent<HTMLInputElement>) => setUserName(event.target.value)}\n />\n </FormGroup>\n <StatefulButton\n type=\"submit\"\n variant=\"brand\"\n state={isSubmitting ? 'pending' : 'default'}\n disabled={!userName}\n labels={{\n default: formatMessage(messages.submit),\n pending: formatMessage(messages.submitting),\n }}\n />\n </Form>\n );\n}\n"]}
|
package/dist/shell/header/course-bar/masquerade/masquerade-widget/MasqueradeWidgetOption.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MasqueradeWidgetOption.js","sourceRoot":"","sources":["../../../../../../shell/header/course-bar/masquerade/masquerade-widget/MasqueradeWidgetOption.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAO5C,MAAM,UAAU,sBAAsB,CAAC,EAAE,MAAM,EAAS;IACtD,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAEjE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;qDAEiD;IACjD,MAAM,aAAa,GAAG,aAAa,KAAK,IAAI;QAC1C,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;QACpC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC,OAAO,CACL,KAAC,QAAQ,CAAC,IAAI,IACZ,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EACxC,IAAI,EAAC,GAAG,EACR,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,YAE5B,MAAM,CAAC,IAAI,GACE,CACjB,CAAC;AACJ,CAAC","sourcesContent":["import { Dropdown } from '@openedx/paragon';\n\nimport { useMasqueradeContext } from '../MasqueradeContext';\nimport { isOptionSelected } from '../hooks';\nimport type { MasqueradeOption } from '../data/api';\n\ninterface Props {\n option: MasqueradeOption
|
|
1
|
+
{"version":3,"file":"MasqueradeWidgetOption.js","sourceRoot":"","sources":["../../../../../../shell/header/course-bar/masquerade/masquerade-widget/MasqueradeWidgetOption.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAE5C,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,UAAU,CAAC;AAO5C,MAAM,UAAU,sBAAsB,CAAC,EAAE,MAAM,EAAS;IACtD,MAAM,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,oBAAoB,EAAE,CAAC;IAEjE,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QACjB,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;qDAEiD;IACjD,MAAM,aAAa,GAAG,aAAa,KAAK,IAAI;QAC1C,CAAC,CAAC,MAAM,CAAC,IAAI,KAAK,aAAa,CAAC,IAAI;QACpC,CAAC,CAAC,gBAAgB,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAErC,OAAO,CACL,KAAC,QAAQ,CAAC,IAAI,IACZ,SAAS,EAAE,aAAa,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,EACxC,IAAI,EAAC,GAAG,EACR,OAAO,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,YAE5B,MAAM,CAAC,IAAI,GACE,CACjB,CAAC;AACJ,CAAC","sourcesContent":["import { Dropdown } from '@openedx/paragon';\n\nimport { useMasqueradeContext } from '../MasqueradeContext';\nimport { isOptionSelected } from '../hooks';\nimport type { MasqueradeOption } from '../data/api';\n\ninterface Props {\n option: MasqueradeOption;\n}\n\nexport function MasqueradeWidgetOption({ option }: Props) {\n const { active, pendingOption, select } = useMasqueradeContext();\n\n if (!option.name) {\n return null;\n }\n\n /* While a click is pending, the menu mirrors the toggle: only that option\n * is highlighted. Once the server confirms (pendingOption clears), the\n * active-server-state logic takes over again. */\n const isHighlighted = pendingOption !== null\n ? option.name === pendingOption.name\n : isOptionSelected(option, active);\n\n return (\n <Dropdown.Item\n className={isHighlighted ? 'active' : ''}\n href=\"#\"\n onClick={() => select(option)}\n >\n {option.name}\n </Dropdown.Item>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"CourseTabsNavigation.js","sourceRoot":"","sources":["../../../../../shell/header/course-bar/navigation/CourseTabsNavigation.tsx"],"names":[],"mappings":"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","sourcesContent":["import { useMemo } from 'react';\nimport { Link, useLocation, useParams } from 'react-router-dom';\nimport { useQuery } from '@tanstack/react-query';\nimport { Slot, useIntl } from '../../../../runtime';\nimport {\n CourseTab,\n courseHomeCourseMetadataQueryKey,\n findActiveTab,\n getCourseHomeCourseMetadata,\n} from '../data/service';\nimport { Container, Nav, Navbar, Skeleton } from '@openedx/paragon';\nimport messages from './messages';\nimport { isClientRoute } from '../utils';\nimport './course-tabs-navigation.scss';\n\ninterface ResolvedTab extends CourseTab {\n pathname: string
|
|
1
|
+
{"version":3,"file":"CourseTabsNavigation.js","sourceRoot":"","sources":["../../../../../shell/header/course-bar/navigation/CourseTabsNavigation.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAChE,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACpD,OAAO,EAEL,gCAAgC,EAChC,aAAa,EACb,2BAA2B,GAC5B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,QAAQ,MAAM,YAAY,CAAC;AAClC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,+BAA+B,CAAC;AAOvC,MAAM,oBAAoB,GAAG,GAAG,EAAE;IAChC,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,EAAE,QAAQ,GAAG,EAAE,EAAE,GAAG,SAAS,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IAEvB,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,SAAS,EAAE,GAAG,QAAQ,CAAC;QAClD,QAAQ,EAAE,gCAAgC,CAAC,QAAQ,CAAC;QACpD,OAAO,EAAE,GAAG,EAAE,CAAC,2BAA2B,CAAC,QAAQ,CAAC;QACpD,KAAK,EAAE,CAAC;QACR,OAAO,EAAE,CAAC,CAAC,QAAQ;KACpB,CAAC,CAAC;IAEH,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC;IAEtB,MAAM,YAAY,GAAkB,OAAO,CACzC,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACnB,yDAAyD;QACzD,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC3C,uCAAY,GAAG,KAAE,QAAQ,EAAE,UAAU,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,IAAG;IACrF,CAAC,CAAC,EACF,CAAC,IAAI,CAAC,CACP,CAAC;IAEF,MAAM,UAAU,GAAG,OAAO,CACxB,GAAG,EAAE,eAAC,OAAA,CAAC,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAA,MAAA,aAAa,CAAC,YAAY,EAAE,QAAQ,CAAC,QAAQ,CAAC,0CAAE,KAAK,mCAAI,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAA,EAAA,EACtG,CAAC,QAAQ,CAAC,QAAQ,EAAE,YAAY,CAAC,CAClC,CAAC;IAEF,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,KAAC,QAAQ,IAAC,SAAS,EAAC,WAAW,GAAG,CAAC;IAC5C,CAAC;IAED,IAAI,CAAC,QAAQ,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,OAAO,CACL,KAAC,MAAM,IAAC,MAAM,EAAC,IAAI,EAAC,SAAS,EAAC,6BAA6B,gBAAa,IAAI,CAAC,aAAa,CAAC,QAAQ,CAAC,cAAc,CAAC,YACjH,KAAC,SAAS,IAAC,KAAK,QAAC,IAAI,EAAC,IAAI,YACxB,MAAC,GAAG,IACF,OAAO,EAAC,MAAM,EACd,SAAS,EAAE,UAAU,aAErB,KAAC,MAAM,CAAC,MAAM,qBAAe,YAAY,GAAG,EAC5C,KAAC,MAAM,CAAC,QAAQ,IAAC,EAAE,EAAC,YAAY,YAE5B,YAAY,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,CACtB,KAAC,GAAG,CAAC,IAAI,cACP,KAAC,GAAG,CAAC,IAAI,oBACH,CAAC,GAAG,CAAC,UAAU;gCACjB,CAAC,CAAC,EAAE,EAAE,EAAE,GAAG,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE;gCAClC,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,EAAE,CACpB,IACD,MAAM,EAAE,GAAG,CAAC,KAAK,KAAK,UAAU,YAE/B,GAAG,CAAC,KAAK,IACD,IATE,GAAG,CAAC,KAAK,CAUb,CACZ,CAAC,GAEY,EAClB,KAAC,IAAI,IAAC,EAAE,EAAC,sEAAsE,GAAG,IAC9E,GACI,GACL,CACV,CAAC;AACJ,CAAC,CAAC;AAEF,eAAe,oBAAoB,CAAC","sourcesContent":["import { useMemo } from 'react';\nimport { Link, useLocation, useParams } from 'react-router-dom';\nimport { useQuery } from '@tanstack/react-query';\nimport { Slot, useIntl } from '../../../../runtime';\nimport {\n CourseTab,\n courseHomeCourseMetadataQueryKey,\n findActiveTab,\n getCourseHomeCourseMetadata,\n} from '../data/service';\nimport { Container, Nav, Navbar, Skeleton } from '@openedx/paragon';\nimport messages from './messages';\nimport { isClientRoute } from '../utils';\nimport './course-tabs-navigation.scss';\n\ninterface ResolvedTab extends CourseTab {\n pathname: string;\n clientPath: string | null;\n}\n\nconst CourseTabsNavigation = () => {\n const location = useLocation();\n const { courseId = '' } = useParams();\n const intl = useIntl();\n\n const { data = { tabs: [] }, isLoading } = useQuery({\n queryKey: courseHomeCourseMetadataQueryKey(courseId),\n queryFn: () => getCourseHomeCourseMetadata(courseId),\n retry: 2,\n enabled: !!courseId,\n });\n\n const { tabs } = data;\n\n const resolvedTabs: ResolvedTab[] = useMemo(\n () => tabs.map(tab => {\n // Tab URLs from the course_home API are always absolute.\n const pathname = new URL(tab.url).pathname;\n return { ...tab, pathname, clientPath: isClientRoute(pathname) ? pathname : null };\n }),\n [tabs]\n );\n\n const currentTab = useMemo(\n () => (resolvedTabs.length > 0 ? findActiveTab(resolvedTabs, location.pathname)?.tabId ?? null : null),\n [location.pathname, resolvedTabs]\n );\n\n if (isLoading) {\n return <Skeleton className=\"lead mt-3\" />;\n }\n\n if (!courseId || resolvedTabs.length === 0) {\n return null;\n }\n\n return (\n <Navbar expand=\"sm\" className=\"course-tabs-navigation pb-0\" aria-label={intl.formatMessage(messages.courseMaterial)}>\n <Container fluid size=\"xl\">\n <Nav\n variant=\"tabs\"\n activeKey={currentTab}\n >\n <Navbar.Toggle aria-controls=\"course-nav\" />\n <Navbar.Collapse id=\"course-nav\">\n {\n resolvedTabs.map(tab => (\n <Nav.Item key={tab.tabId}>\n <Nav.Link\n {...(tab.clientPath\n ? { to: tab.clientPath, as: Link }\n : { href: tab.url }\n )}\n active={tab.tabId === currentTab}\n >\n {tab.title}\n </Nav.Link>\n </Nav.Item>\n ))\n }\n </Navbar.Collapse>\n <Slot id=\"org.openedx.frontend.slot.header.courseNavigationBar.extraContent.v1\" />\n </Nav>\n </Container>\n </Navbar>\n );\n};\n\nexport default CourseTabsNavigation;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"helpButtonSlotOperation.js","sourceRoot":"","sources":["../../../shell/header/helpButtonSlotOperation.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAyB,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG,4CAA4C,CAAC;AAEzE,MAAM,UAAU,uBAAuB,CACrC,EAAE,KAAK,EAAE,IAAI,EAAmC;IAEhD,OAAO;QACL,MAAM,EAAE,oDAAoD;QAC5D,EAAE,EAAE,YAAY;QAChB,EAAE,EAAE,oBAAoB,CAAC,MAAM;QAC/B,OAAO,EAAE,CACP,KAAC,UAAU,IACT,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,WAAiC,GACnE,CACH;QACD,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;KAC9B,CAAC;AACJ,CAAC","sourcesContent":["import { getAppConfig, WidgetAppendOperation, WidgetOperationTypes } from '../../runtime';\nimport HelpButton from './HelpButton';\n\nexport const helpWidgetId = 'org.openedx.frontend.widget.header.help.v1';\n\nexport function helpButtonSlotOperation(\n { appId, role }: { appId: string
|
|
1
|
+
{"version":3,"file":"helpButtonSlotOperation.js","sourceRoot":"","sources":["../../../shell/header/helpButtonSlotOperation.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAyB,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAC1F,OAAO,UAAU,MAAM,cAAc,CAAC;AAEtC,MAAM,CAAC,MAAM,YAAY,GAAG,4CAA4C,CAAC;AAEzE,MAAM,UAAU,uBAAuB,CACrC,EAAE,KAAK,EAAE,IAAI,EAAmC;IAEhD,OAAO;QACL,MAAM,EAAE,oDAAoD;QAC5D,EAAE,EAAE,YAAY;QAChB,EAAE,EAAE,oBAAoB,CAAC,MAAM;QAC/B,OAAO,EAAE,CACP,KAAC,UAAU,IACT,MAAM,EAAE,GAAG,EAAE,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,WAAiC,GACnE,CACH;QACD,SAAS,EAAE,EAAE,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE;KAC9B,CAAC;AACJ,CAAC","sourcesContent":["import { getAppConfig, WidgetAppendOperation, WidgetOperationTypes } from '../../runtime';\nimport HelpButton from './HelpButton';\n\nexport const helpWidgetId = 'org.openedx.frontend.widget.header.help.v1';\n\nexport function helpButtonSlotOperation(\n { appId, role }: { appId: string; role: string },\n): WidgetAppendOperation {\n return {\n slotId: 'org.openedx.frontend.slot.header.secondaryLinks.v1',\n id: helpWidgetId,\n op: WidgetOperationTypes.APPEND,\n element: (\n <HelpButton\n getUrl={() => getAppConfig(appId).SUPPORT_URL as string | undefined}\n />\n ),\n condition: { active: [role] },\n };\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jest.config.js","sourceRoot":"","sources":["../../shell/jest.config.js"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,GAAG;IACf,kBAAkB,EAAE;QAClB,gBAAgB;KACjB;IACD,gBAAgB,EAAE;QAChB,SAAS,EAAE,4BAA4B;QACvC,iFAAiF,EAAE,6BAA6B;QAChH,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC;QACvD,aAAa,EAAE,gCAAgC;KAChD;IACD,eAAe,EAAE,OAAO;IACxB,sBAAsB,EAAE;QACtB,GAAG,EAAE,mBAAmB;KACzB;IACD,mBAAmB,EAAE;QACnB,gCAAgC;KACjC;IACD,0BAA0B,EAAE;QAC1B,gBAAgB;QAChB,cAAc;KACf;IACD,uBAAuB,EAAE;QACvB,
|
|
1
|
+
{"version":3,"file":"jest.config.js","sourceRoot":"","sources":["../../shell/jest.config.js"],"names":[],"mappings":";AAAA,MAAM,CAAC,OAAO,GAAG;IACf,kBAAkB,EAAE;QAClB,gBAAgB;KACjB;IACD,gBAAgB,EAAE;QAChB,SAAS,EAAE,4BAA4B;QACvC,iFAAiF,EAAE,6BAA6B;QAChH,gBAAgB,EAAE,OAAO,CAAC,OAAO,CAAC,oBAAoB,CAAC;QACvD,aAAa,EAAE,gCAAgC;KAChD;IACD,eAAe,EAAE,OAAO;IACxB,sBAAsB,EAAE;QACtB,GAAG,EAAE,mBAAmB;KACzB;IACD,mBAAmB,EAAE;QACnB,gCAAgC;KACjC;IACD,0BAA0B,EAAE;QAC1B,gBAAgB;QAChB,cAAc;KACf;IACD,uBAAuB,EAAE;QACvB,4EAA4E;KAC7E;IACD,sBAAsB,EAAE;QACtB,uBAAuB;QACvB,gBAAgB;QAChB,QAAQ;KACT;CACF,CAAC","sourcesContent":["module.exports = {\n setupFilesAfterEnv: [\n './setupTest.js',\n ],\n moduleNameMapper: {\n '\\\\.svg$': '<rootDir>/__mocks__/svg.js',\n '\\\\.(jpg|jpeg|png|gif|eot|otf|webp|ttf|woff|woff2|mp4|webm|wav|mp3|m4a|aac|oga)$': '<rootDir>/__mocks__/file.js',\n '\\\\.(css|scss)$': require.resolve('identity-obj-proxy'),\n 'site.config': '<rootDir>/site.config.test.tsx',\n },\n testEnvironment: 'jsdom',\n testEnvironmentOptions: {\n url: 'http://localhost/',\n },\n collectCoverageFrom: [\n '<rootDir>/**/*.{js,jsx,ts,tsx}',\n ],\n coveragePathIgnorePatterns: [\n '/node_modules/',\n 'setupTest.js',\n ],\n transformIgnorePatterns: [\n '/node_modules/(?!(@openedx|@edx|react-intl|@formatjs|intl-messageformat)/)',\n ],\n testPathIgnorePatterns: [\n '/site.config.test.tsx',\n '/node_modules/',\n '/dist/',\n ],\n};\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"LinkMenuItem.js","sourceRoot":"","sources":["../../../shell/menus/LinkMenuItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI1D,OAAO,EACL,YAAY,EACb,MAAM,cAAc,CAAC;AAStB,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAG,WAAW,EAAqB;IACjG,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE7C,IAAI,QAAmC,CAAC;IACxC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,QAAQ,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,6FAA6F;IAC7F,sDAAsD;IACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,OAAO,CACL,KAAC,SAAS,IAAC,WAAW,EAAE,QAAQ,YAC7B,UAAU,GACD,CACb,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CACL,KAAC,OAAO,IAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,YAClG,UAAU,GACH,CACX,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,KAAK,iBAAiB,EAAE,CAAC;QACzC,OAAO,CACL,KAAC,WAAW,CAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,YAC7B,UAAU,GACM,CACpB,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;QACtC,OAAO,CACL,KAAC,QAAQ,CAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,YAC1B,UAAU,GACG,CACjB,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { Dropdown, Hyperlink, NavDropdown, NavLink } from '@openedx/paragon';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\n\nimport { getUrlByRouteRole } from '../../runtime/routing';\nimport {\n MenuItemName\n} from '../../types';\nimport {\n getItemLabel\n} from './data/utils';\n\ninterface LinkMenuItemProps {\n label: MenuItemName
|
|
1
|
+
{"version":3,"file":"LinkMenuItem.js","sourceRoot":"","sources":["../../../shell/menus/LinkMenuItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC7E,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AACrC,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAE/C,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAI1D,OAAO,EACL,YAAY,EACb,MAAM,cAAc,CAAC;AAStB,MAAM,CAAC,OAAO,UAAU,YAAY,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,GAAG,WAAW,EAAqB;IACjG,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;IAC/B,MAAM,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IAE7C,IAAI,QAAmC,CAAC;IACxC,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACvB,QAAQ,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACrC,CAAC;SAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC7B,QAAQ,GAAG,GAAG,CAAC;IACjB,CAAC;IAED,6FAA6F;IAC7F,sDAAsD;IACtD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;QAC5B,OAAO,CACL,KAAC,SAAS,IAAC,WAAW,EAAE,QAAQ,YAC7B,UAAU,GACD,CACb,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QACjC,OAAO,CACL,KAAC,OAAO,IAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,YAClG,UAAU,GACH,CACX,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,KAAK,iBAAiB,EAAE,CAAC;QACzC,OAAO,CACL,KAAC,WAAW,CAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,YAC7B,UAAU,GACM,CACpB,CAAC;IACJ,CAAC;SAAM,IAAI,OAAO,KAAK,cAAc,EAAE,CAAC;QACtC,OAAO,CACL,KAAC,QAAQ,CAAC,IAAI,IAAC,IAAI,EAAE,QAAQ,YAC1B,UAAU,GACG,CACjB,CAAC;IACJ,CAAC;IAED,4EAA4E;IAC5E,OAAO,IAAI,CAAC;AACd,CAAC","sourcesContent":["import { Dropdown, Hyperlink, NavDropdown, NavLink } from '@openedx/paragon';\nimport { useIntl } from 'react-intl';\nimport { useLocation } from 'react-router-dom';\n\nimport { getUrlByRouteRole } from '../../runtime/routing';\nimport {\n MenuItemName\n} from '../../types';\nimport {\n getItemLabel\n} from './data/utils';\n\ninterface LinkMenuItemProps {\n label: MenuItemName;\n role?: string;\n url?: string;\n variant?: 'hyperlink' | 'navLink' | 'navDropdownItem' | 'dropdownItem';\n}\n\nexport default function LinkMenuItem({ label, role, url, variant = 'hyperlink' }: LinkMenuItemProps) {\n const intl = useIntl();\n const location = useLocation();\n const finalLabel = getItemLabel(label, intl);\n\n let finalUrl: string | null | undefined;\n if (role !== undefined) {\n finalUrl = getUrlByRouteRole(role);\n } else if (url !== undefined) {\n finalUrl = url;\n }\n\n // The URL will only be null if the item is an \"app\" menu item, and if the app is not loaded.\n // We automatically hide the link if this is the case.\n if (!finalUrl) {\n return null;\n }\n\n if (variant === 'hyperlink') {\n return (\n <Hyperlink destination={finalUrl}>\n {finalLabel}\n </Hyperlink>\n );\n } else if (variant === 'navLink') {\n return (\n <NavLink href={finalUrl} active={location.pathname.replace(/\\/$/, '') === finalUrl.replace(/\\/$/, '')}>\n {finalLabel}\n </NavLink>\n );\n } else if (variant === 'navDropdownItem') {\n return (\n <NavDropdown.Item href={finalUrl}>\n {finalLabel}\n </NavDropdown.Item>\n );\n } else if (variant === 'dropdownItem') {\n return (\n <Dropdown.Item href={finalUrl}>\n {finalLabel}\n </Dropdown.Item>\n );\n }\n\n // Just return null if the item is something we haven't accounted for above.\n return null;\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"NavDropdownMenuSlot.js","sourceRoot":"","sources":["../../../shell/menus/NavDropdownMenuSlot.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIvE,OAAO,EACL,YAAY,EACb,MAAM,cAAc,CAAC;AAOtB,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAyB;;IAC3E,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;IAEpC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAA,OAAO,CAAC,KAAK,mCAAI,KAAK,EAAE,IAAI,CAAC,CAAC;IAE9D,OAAO,CACL,KAAC,WAAW,IAAU,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,YAC1D,OAAO,IADQ,EAAE,CAEN,CACf,CAAC;AACJ,CAAC","sourcesContent":["import { NavDropdown } from '@openedx/paragon';\nimport { useIntl } from 'react-intl';\n\nimport { useLayoutOptionsForId, useWidgetsForId } from '../../runtime';\nimport {\n MenuItemName\n} from '../../types';\nimport {\n getItemLabel\n} from './data/utils';\n\ninterface DropdownMenuSlotProps {\n id: string
|
|
1
|
+
{"version":3,"file":"NavDropdownMenuSlot.js","sourceRoot":"","sources":["../../../shell/menus/NavDropdownMenuSlot.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAErC,OAAO,EAAE,qBAAqB,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAIvE,OAAO,EACL,YAAY,EACb,MAAM,cAAc,CAAC;AAOtB,MAAM,CAAC,OAAO,UAAU,gBAAgB,CAAC,EAAE,EAAE,EAAE,KAAK,EAAyB;;IAC3E,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,qBAAqB,CAAC,EAAE,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,eAAe,CAAC,EAAE,CAAC,CAAC;IAEpC,MAAM,UAAU,GAAG,YAAY,CAAC,MAAA,OAAO,CAAC,KAAK,mCAAI,KAAK,EAAE,IAAI,CAAC,CAAC;IAE9D,OAAO,CACL,KAAC,WAAW,IAAU,KAAK,EAAE,UAAU,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,YAC1D,OAAO,IADQ,EAAE,CAEN,CACf,CAAC;AACJ,CAAC","sourcesContent":["import { NavDropdown } from '@openedx/paragon';\nimport { useIntl } from 'react-intl';\n\nimport { useLayoutOptionsForId, useWidgetsForId } from '../../runtime';\nimport {\n MenuItemName\n} from '../../types';\nimport {\n getItemLabel\n} from './data/utils';\n\ninterface DropdownMenuSlotProps {\n id: string;\n label: MenuItemName;\n}\n\nexport default function DropdownMenuSlot({ id, label }: DropdownMenuSlotProps) {\n const intl = useIntl();\n const options = useLayoutOptionsForId(id);\n const widgets = useWidgetsForId(id);\n\n const finalLabel = getItemLabel(options.label ?? label, intl);\n\n return (\n <NavDropdown key={id} title={finalLabel} id={`${id}-dropdown`}>\n {widgets}\n </NavDropdown>\n );\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ProfileLinkMenuItem.js","sourceRoot":"","sources":["../../../shell/menus/ProfileLinkMenuItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAQ1C,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,GAAG,WAAW,EAA4B;IAC1G,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;IACjD,IAAI,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,CAAC,OAAO;QACV,OAAO,IAAI,CAAC;IAEd,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,OAAO,MAAM,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,QAAQ,EAAE,CAAC;IAE1D,OAAO,CACL,KAAC,YAAY,IACX,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,OAAO,GAChB,CACH,CAAC;AACJ,CAAC","sourcesContent":["import { useAuthenticatedUser } from '../../runtime';\nimport { getUrlByRouteRole } from '../../runtime/routing';\nimport { MenuItemName } from '../../types';\n\nimport LinkMenuItem from './LinkMenuItem';\n\ninterface ProfileLinkMenuItemProps {\n label: MenuItemName
|
|
1
|
+
{"version":3,"file":"ProfileLinkMenuItem.js","sourceRoot":"","sources":["../../../shell/menus/ProfileLinkMenuItem.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAG1D,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAQ1C,MAAM,CAAC,OAAO,UAAU,mBAAmB,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,GAAG,WAAW,EAA4B;IAC1G,MAAM,iBAAiB,GAAG,oBAAoB,EAAE,CAAC;IACjD,IAAI,OAAO,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IAEtC,IAAI,CAAC,OAAO;QACV,OAAO,IAAI,CAAC;IAEd,IAAI,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,GAAG,GAAG,GAAG,OAAO,MAAM,iBAAiB,aAAjB,iBAAiB,uBAAjB,iBAAiB,CAAE,QAAQ,EAAE,CAAC;IAE1D,OAAO,CACL,KAAC,YAAY,IACX,KAAK,EAAE,KAAK,EACZ,GAAG,EAAE,GAAG,EACR,OAAO,EAAE,OAAO,GAChB,CACH,CAAC;AACJ,CAAC","sourcesContent":["import { useAuthenticatedUser } from '../../runtime';\nimport { getUrlByRouteRole } from '../../runtime/routing';\nimport { MenuItemName } from '../../types';\n\nimport LinkMenuItem from './LinkMenuItem';\n\ninterface ProfileLinkMenuItemProps {\n label: MenuItemName;\n role: string;\n variant?: 'hyperlink' | 'navLink' | 'navDropdownItem' | 'dropdownItem';\n}\n\nexport default function ProfileLinkMenuItem({ label, role, variant = 'hyperlink' }: ProfileLinkMenuItemProps) {\n const authenticatedUser = useAuthenticatedUser();\n let baseUrl = getUrlByRouteRole(role);\n\n if (!baseUrl)\n return null;\n\n if (baseUrl.endsWith('/')) {\n baseUrl = baseUrl.slice(0, -1);\n }\n\n const url = `${baseUrl}/u/${authenticatedUser?.username}`;\n\n return (\n <LinkMenuItem\n label={label}\n url={url}\n variant={variant}\n />\n );\n}\n"]}
|
|
@@ -93,11 +93,11 @@ module.exports = tseslint.config(eslint.configs.recommended, ...tseslint.configs
|
|
|
93
93
|
'@stylistic/brace-style': ['error', '1tbs'],
|
|
94
94
|
'@stylistic/member-delimiter-style': ['error', {
|
|
95
95
|
multiline: {
|
|
96
|
-
delimiter: '
|
|
96
|
+
delimiter: 'semi',
|
|
97
97
|
requireLast: true,
|
|
98
98
|
},
|
|
99
99
|
singleline: {
|
|
100
|
-
delimiter: '
|
|
100
|
+
delimiter: 'semi',
|
|
101
101
|
requireLast: false,
|
|
102
102
|
}
|
|
103
103
|
}],
|
package/dist/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AA6HA,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,6CAAyB,CAAA;IACzB,+CAA2B,CAAA;IAC3B,iCAAa,CAAA;AACf,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B","sourcesContent":["import { FC, ReactElement, ReactNode } from 'react';\nimport { MessageDescriptor } from 'react-intl';\nimport { RouteObject } from 'react-router';\nimport { SlotOperation } from './runtime/slots/types';\n\n// Apps\n\nexport interface ExternalRoute {\n role: string
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../types.ts"],"names":[],"mappings":"AA6HA,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,6CAAyB,CAAA;IACzB,+CAA2B,CAAA;IAC3B,iCAAa,CAAA;AACf,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B","sourcesContent":["import { FC, ReactElement, ReactNode } from 'react';\nimport { MessageDescriptor } from 'react-intl';\nimport { RouteObject } from 'react-router';\nimport { SlotOperation } from './runtime/slots/types';\n\n// Apps\n\nexport interface ExternalRoute {\n role: string;\n url: string;\n}\n\nexport type RoleRouteObject = RouteObject & {\n handle?: {\n /**\n * Route roles identify the purpose(s) a route fulfills in the site.\n */\n roles?: string[];\n };\n};\n\nexport type AppConfig = Record<string, unknown>;\n\nexport type AppProvider = FC<{ children?: ReactNode }>;\n\nexport interface App {\n appId: string;\n routes?: RoleRouteObject[];\n providers?: AppProvider[];\n slots?: SlotOperation[];\n externalScripts?: ExternalScriptLoaderClass[];\n config?: AppConfig;\n provides?: Record<string, unknown>;\n}\n\n// External Scripts\n\nexport interface ExternalScriptLoader {\n loadScript(): void;\n}\n\nexport type ExternalScriptLoaderClass = new (data: { config: AppConfig }) => ExternalScriptLoader;\n\n// Site Config\n\nexport interface RequiredSiteConfig {\n siteId: string;\n siteName: string;\n baseUrl: string;\n\n // Backends\n lmsBaseUrl: string;\n\n // Frontends\n loginUrl: string;\n logoutUrl: string;\n}\n\nexport type LocalizedMessages = Record<string, Record<string, string>>;\nexport type SiteMessages = LocalizedMessages[];\n\nexport interface OptionalSiteConfig {\n // Site environment\n environment: EnvironmentTypes;\n\n // Backends\n cmsBaseUrl: string;\n\n // Apps, routes, and URLs\n apps: App[];\n basename: string;\n externalRoutes: ExternalRoute[];\n externalLinkUrlOverrides: string[];\n runtimeConfigJsonUrl: string | null;\n commonAppConfig: AppConfig;\n headerLogoImageUrl: string;\n\n // Theme\n theme: Theme;\n\n // Cookies\n accessTokenCookieName: string;\n languagePreferenceCookieName: string;\n userInfoCookieName: string;\n\n // Paths\n csrfTokenApiPath: string;\n refreshAccessTokenApiPath: string;\n\n // Logging\n ignoredErrorRegex: RegExp | null;\n\n // Analytics\n segmentKey: string | null;\n}\n\nexport type SiteConfig = RequiredSiteConfig & Partial<OptionalSiteConfig>;\n\nexport interface ThemeVariant {\n url: string;\n}\n\nexport interface ThemeDefaults {\n light?: string;\n dark?: string;\n}\n\nexport type ThemeVariants = Record<string, ThemeVariant>;\n\nexport interface Theme {\n core?: ThemeVariant;\n defaults?: ThemeDefaults;\n variants?: ThemeVariants;\n}\n\nexport interface User {\n administrator: boolean;\n email: string;\n name: string;\n roles: string[];\n userId: number;\n username: string;\n avatar: string;\n}\n\nexport enum EnvironmentTypes {\n PRODUCTION = 'production',\n DEVELOPMENT = 'development',\n TEST = 'test',\n}\n\n// Menu Items\n\nexport type MenuItemName = string | MessageDescriptor | ReactElement;\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@openedx/frontend-base",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0-alpha.2",
|
|
4
4
|
"description": "Build tools, setup and config for frontend apps",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -116,7 +116,7 @@
|
|
|
116
116
|
"prop-types": "^15.8.1",
|
|
117
117
|
"react-dev-utils": "12.0.1",
|
|
118
118
|
"react-focus-on": "^3.10.2",
|
|
119
|
-
"react-intl": "^
|
|
119
|
+
"react-intl": "^10.1.20",
|
|
120
120
|
"react-refresh": "0.18.0",
|
|
121
121
|
"react-refresh-typescript": "^2.0.9",
|
|
122
122
|
"react-responsive": "^10.0.0",
|
|
@@ -160,7 +160,7 @@
|
|
|
160
160
|
"nodemon": "^3.1.4"
|
|
161
161
|
},
|
|
162
162
|
"peerDependencies": {
|
|
163
|
-
"@openedx/paragon": "^23.
|
|
163
|
+
"@openedx/paragon": "^23.23.0",
|
|
164
164
|
"@tanstack/react-query": "^5.81.2",
|
|
165
165
|
"react": "^18.3.1",
|
|
166
166
|
"react-dom": "^18.3.1",
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
export default injectIntlWithShim;
|
|
2
|
-
/**
|
|
3
|
-
* This function wraps react-intl's injectIntl function in order to add error logging to the intl
|
|
4
|
-
* property's formatMessage function.
|
|
5
|
-
*
|
|
6
|
-
* @memberof I18n
|
|
7
|
-
*/
|
|
8
|
-
declare function injectIntlWithShim(WrappedComponent: any): React.FC<import("react-intl").WithIntlProps<any>> & {
|
|
9
|
-
WrappedComponent: React.ComponentType<any>;
|
|
10
|
-
};
|
|
11
|
-
import React from 'react';
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import React from 'react';
|
|
3
|
-
import { injectIntl } from 'react-intl';
|
|
4
|
-
import { EnvironmentTypes } from '../../types';
|
|
5
|
-
import { getSiteConfig } from '../config';
|
|
6
|
-
import { getLoggingService } from '../logging';
|
|
7
|
-
import { intlShape } from './lib';
|
|
8
|
-
/**
|
|
9
|
-
* This function wraps react-intl's injectIntl function in order to add error logging to the intl
|
|
10
|
-
* property's formatMessage function.
|
|
11
|
-
*
|
|
12
|
-
* @memberof I18n
|
|
13
|
-
*/
|
|
14
|
-
const injectIntlWithShim = (WrappedComponent) => {
|
|
15
|
-
class ShimmedIntlComponent extends React.Component {
|
|
16
|
-
constructor(props) {
|
|
17
|
-
super(props);
|
|
18
|
-
this.shimmedIntl = Object.create(this.props.intl, {
|
|
19
|
-
formatMessage: {
|
|
20
|
-
value: (definition, ...args) => {
|
|
21
|
-
if (definition === undefined || definition.id === undefined) {
|
|
22
|
-
const error = new Error('i18n error: An undefined message was supplied to intl.formatMessage.');
|
|
23
|
-
if (getSiteConfig().environment === EnvironmentTypes.DEVELOPMENT) {
|
|
24
|
-
console.error(error); // eslint-disable-line no-console
|
|
25
|
-
return '!!! Missing message supplied to intl.formatMessage !!!';
|
|
26
|
-
}
|
|
27
|
-
getLoggingService().logError(error);
|
|
28
|
-
return ''; // Fail silently in production
|
|
29
|
-
}
|
|
30
|
-
return this.props.intl.formatMessage(definition, ...args);
|
|
31
|
-
},
|
|
32
|
-
},
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
render() {
|
|
36
|
-
return _jsx(WrappedComponent, Object.assign({}, this.props, { intl: this.shimmedIntl }));
|
|
37
|
-
}
|
|
38
|
-
}
|
|
39
|
-
ShimmedIntlComponent.propTypes = {
|
|
40
|
-
intl: intlShape.isRequired,
|
|
41
|
-
};
|
|
42
|
-
return injectIntl(ShimmedIntlComponent);
|
|
43
|
-
};
|
|
44
|
-
export default injectIntlWithShim;
|
|
45
|
-
//# sourceMappingURL=injectIntlWithShim.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"injectIntlWithShim.js","sourceRoot":"","sources":["../../../runtime/i18n/injectIntlWithShim.jsx"],"names":[],"mappings":";AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,iBAAiB,EAAE,MAAM,YAAY,CAAC;AAC/C,OAAO,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC;AAElC;;;;;GAKG;AACH,MAAM,kBAAkB,GAAG,CAAC,gBAAgB,EAAE,EAAE;IAC9C,MAAM,oBAAqB,SAAQ,KAAK,CAAC,SAAS;QAChD,YAAY,KAAK;YACf,KAAK,CAAC,KAAK,CAAC,CAAC;YACb,IAAI,CAAC,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE;gBAChD,aAAa,EAAE;oBACb,KAAK,EAAE,CAAC,UAAU,EAAE,GAAG,IAAI,EAAE,EAAE;wBAC7B,IAAI,UAAU,KAAK,SAAS,IAAI,UAAU,CAAC,EAAE,KAAK,SAAS,EAAE,CAAC;4BAC5D,MAAM,KAAK,GAAG,IAAI,KAAK,CAAC,sEAAsE,CAAC,CAAC;4BAChG,IAAI,aAAa,EAAE,CAAC,WAAW,KAAK,gBAAgB,CAAC,WAAW,EAAE,CAAC;gCACjE,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,iCAAiC;gCACvD,OAAO,wDAAwD,CAAC;4BAClE,CAAC;4BACD,iBAAiB,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;4BACpC,OAAO,EAAE,CAAC,CAAC,8BAA8B;wBAC3C,CAAC;wBACD,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,CAAC;oBAC5D,CAAC;iBACF;aACF,CAAC,CAAC;QACL,CAAC;QAED,MAAM;YACJ,OAAO,KAAC,gBAAgB,oBAAK,IAAI,CAAC,KAAK,IAAE,IAAI,EAAE,IAAI,CAAC,WAAW,IAAI,CAAC;QACtE,CAAC;KACF;IAED,oBAAoB,CAAC,SAAS,GAAG;QAC/B,IAAI,EAAE,SAAS,CAAC,UAAU;KAC3B,CAAC;IAEF,OAAO,UAAU,CAAC,oBAAoB,CAAC,CAAC;AAC1C,CAAC,CAAC;AAEF,eAAe,kBAAkB,CAAC","sourcesContent":["import React from 'react';\nimport { injectIntl } from 'react-intl';\nimport { EnvironmentTypes } from '../../types';\nimport { getSiteConfig } from '../config';\nimport { getLoggingService } from '../logging';\nimport { intlShape } from './lib';\n\n/**\n * This function wraps react-intl's injectIntl function in order to add error logging to the intl\n * property's formatMessage function.\n *\n * @memberof I18n\n */\nconst injectIntlWithShim = (WrappedComponent) => {\n class ShimmedIntlComponent extends React.Component {\n constructor(props) {\n super(props);\n this.shimmedIntl = Object.create(this.props.intl, {\n formatMessage: {\n value: (definition, ...args) => {\n if (definition === undefined || definition.id === undefined) {\n const error = new Error('i18n error: An undefined message was supplied to intl.formatMessage.');\n if (getSiteConfig().environment === EnvironmentTypes.DEVELOPMENT) {\n console.error(error); // eslint-disable-line no-console\n return '!!! Missing message supplied to intl.formatMessage !!!';\n }\n getLoggingService().logError(error);\n return ''; // Fail silently in production\n }\n return this.props.intl.formatMessage(definition, ...args);\n },\n },\n });\n }\n\n render() {\n return <WrappedComponent {...this.props} intl={this.shimmedIntl} />;\n }\n }\n\n ShimmedIntlComponent.propTypes = {\n intl: intlShape.isRequired,\n };\n\n return injectIntl(ShimmedIntlComponent);\n};\n\nexport default injectIntlWithShim;\n"]}
|