@openedx/frontend-base 1.0.0-alpha.40 → 1.0.0-alpha.42
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/runtime/config/index.js +29 -18
- package/dist/runtime/config/index.js.map +1 -1
- package/dist/runtime/i18n/lib.js +1 -1
- package/dist/runtime/i18n/lib.js.map +1 -1
- package/dist/runtime/react/CombinedAppProvider.d.ts +1 -1
- package/dist/runtime/react/CombinedAppProvider.js +14 -18
- package/dist/runtime/react/CombinedAppProvider.js.map +1 -1
- package/dist/runtime/react/hooks/useActiveRoles.js +6 -3
- package/dist/runtime/react/hooks/useActiveRoles.js.map +1 -1
- package/dist/runtime/react/hooks/useActiveRouteRoleWatcher.js +3 -9
- package/dist/runtime/react/hooks/useActiveRouteRoleWatcher.js.map +1 -1
- package/dist/runtime/slots/Slot.d.ts +3 -2
- package/dist/runtime/slots/Slot.js +4 -2
- package/dist/runtime/slots/Slot.js.map +1 -1
- package/dist/runtime/slots/hooks.d.ts +3 -5
- package/dist/runtime/slots/hooks.js +6 -16
- package/dist/runtime/slots/hooks.js.map +1 -1
- package/dist/runtime/slots/layout/hooks.d.ts +1 -2
- package/dist/runtime/slots/layout/hooks.js +19 -24
- package/dist/runtime/slots/layout/hooks.js.map +1 -1
- package/dist/runtime/slots/utils.d.ts +1 -1
- package/dist/runtime/slots/utils.js +2 -3
- package/dist/runtime/slots/utils.js.map +1 -1
- package/dist/runtime/slots/widget/hooks.d.ts +1 -2
- package/dist/runtime/slots/widget/hooks.js +36 -56
- package/dist/runtime/slots/widget/hooks.js.map +1 -1
- package/dist/runtime/slots/widget/utils.js +17 -20
- package/dist/runtime/slots/widget/utils.js.map +1 -1
- package/dist/runtime/utils.js +2 -2
- package/dist/runtime/utils.js.map +1 -1
- package/dist/shell/Shell.messages.d.ts +5 -0
- package/dist/shell/Shell.messages.js +6 -1
- package/dist/shell/Shell.messages.js.map +1 -1
- package/dist/shell/header/HelpButton.d.ts +5 -0
- package/dist/shell/header/HelpButton.js +10 -0
- package/dist/shell/header/HelpButton.js.map +1 -0
- package/dist/shell/header/app.scss +6 -0
- package/dist/shell/header/desktop/SecondaryNavLinks.js +1 -1
- package/dist/shell/header/desktop/SecondaryNavLinks.js.map +1 -1
- package/dist/shell/header/helpButtonSlotOperation.d.ts +6 -0
- package/dist/shell/header/helpButtonSlotOperation.js +14 -0
- package/dist/shell/header/helpButtonSlotOperation.js.map +1 -0
- package/dist/shell/header/index.d.ts +2 -0
- package/dist/shell/header/index.js +2 -0
- package/dist/shell/header/index.js.map +1 -1
- package/dist/shell/index.d.ts +1 -1
- package/dist/shell/index.js +1 -1
- package/dist/shell/index.js.map +1 -1
- package/dist/tools/cli/utils/translations/prepare.js +2 -2
- package/package.json +3 -9
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../runtime/slots/layout/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../runtime/slots/layout/hooks.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,OAAO,EAAE,MAAM,OAAO,CAAC;AAC1D,OAAO,cAAc,MAAM,kCAAkC,CAAC;AAC9D,OAAO,EAAE,cAAc,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAC7D,OAAO,EAAE,iCAAiC,EAAE,MAAM,UAAU,CAAC;AAE7D,OAAO,EAAE,iBAAiB,EAAE,wBAAwB,EAAE,wBAAwB,EAAE,MAAM,SAAS,CAAC;AAEhG,SAAS,uBAAuB,CAAC,SAA0B;IACzD,OAAO,iBAAiB,CAAC,SAAS,CAAC,IAAI,WAAW,IAAI,SAAS,CAAC;AAClE,CAAC;AAED,SAAS,qBAAqB,CAAC,SAA0B;IACvD,OAAO,iBAAiB,CAAC,SAAS,CAAC,IAAI,SAAS,IAAI,SAAS,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAU;IAC3C,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,OAAO,OAAO,CAA4B,GAAG,EAAE;QAC7C,IAAI,aAAa,GAA8B,IAAI,CAAC;QACpD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,iCAAiC,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrG,IAAI,uBAAuB,CAAC,SAAS,CAAC,EAAE,CAAC;oBACvC,aAAa,GAAG,SAAS,CAAC,SAAS,CAAC;gBACtC,CAAC;qBAAM,IAAI,qBAAqB,CAAC,SAAS,CAAC,EAAE,CAAC;oBAC5C,aAAa,GAAG,SAAS,CAAC,OAAO,CAAC;gBACpC,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,aAAa,CAAC;IACvB,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AAChC,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,gBAAgB;IAC9B,MAAM,EAAE,EAAE,EAAE,GAAG,cAAc,EAAE,CAAC;IAChC,OAAO,qBAAqB,CAAC,EAAE,CAAC,CAAC;AACnC,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,EAAU;IAC9C,MAAM,UAAU,GAAG,iBAAiB,CAAC,EAAE,CAAC,CAAC;IACzC,MAAM,WAAW,GAAG,cAAc,EAAE,CAAC;IAErC,OAAO,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,OAAO,GAA4B,EAAE,CAAC;QAC1C,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,iCAAiC,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,wBAAwB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACrG,OAAO,mCAAQ,OAAO,GAAK,SAAS,CAAC,OAAO,CAAE,CAAC;YACjD,CAAC;QACH,CAAC;QACD,OAAO,OAAO,CAAC;IACjB,CAAC,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,CAAC;AAChC,CAAC","sourcesContent":["import { ComponentType, ReactNode, useMemo } from 'react';\nimport useActiveRoles from '../../react/hooks/useActiveRoles';\nimport { useSlotContext, useSlotOperations } from '../hooks';\nimport { isSlotOperationConditionSatisfied } from '../utils';\nimport { LayoutComponentProps, LayoutElementProps, LayoutOperation } from './types';\nimport { isLayoutOperation, isLayoutOptionsOperation, isLayoutReplaceOperation } from './utils';\n\nfunction hasLayoutComponentProps(operation: LayoutOperation): operation is (LayoutOperation & LayoutComponentProps) {\n return isLayoutOperation(operation) && 'component' in operation;\n}\n\nfunction hasLayoutElementProps(operation: LayoutOperation): operation is (LayoutOperation & LayoutElementProps) {\n return isLayoutOperation(operation) && 'element' in operation;\n}\n\nexport function useLayoutForSlotId(id: string) {\n const operations = useSlotOperations(id);\n const activeRoles = useActiveRoles();\n\n return useMemo<ReactNode | ComponentType>(() => {\n let layoutElement: ReactNode | ComponentType = null;\n for (const operation of operations) {\n if (isSlotOperationConditionSatisfied(operation, activeRoles) && isLayoutReplaceOperation(operation)) {\n if (hasLayoutComponentProps(operation)) {\n layoutElement = operation.component;\n } else if (hasLayoutElementProps(operation)) {\n layoutElement = operation.element;\n }\n }\n }\n return layoutElement;\n }, [operations, activeRoles]);\n}\n\n/**\n * useLayoutOptions iterates through the slot's operations to find any which are \"layout\n * options\" operations. It merges these into a single object and returns them - operations are\n * merged in declaration order, meaning last one in wins.\n */\nexport function useLayoutOptions() {\n const { id } = useSlotContext();\n return useLayoutOptionsForId(id);\n}\n\nexport function useLayoutOptionsForId(id: string) {\n const operations = useSlotOperations(id);\n const activeRoles = useActiveRoles();\n\n return useMemo(() => {\n let options: Record<string, unknown> = {};\n for (const operation of operations) {\n if (isSlotOperationConditionSatisfied(operation, activeRoles) && isLayoutOptionsOperation(operation)) {\n options = { ...options, ...operation.options };\n }\n }\n return options;\n }, [operations, activeRoles]);\n}\n"]}
|
|
@@ -1,3 +1,3 @@
|
|
|
1
1
|
import { SlotOperation } from './types';
|
|
2
2
|
export declare function getSlotOperations(ids: string[], defaultOperation?: SlotOperation): SlotOperation[];
|
|
3
|
-
export declare function isSlotOperationConditionSatisfied(operation: SlotOperation): boolean;
|
|
3
|
+
export declare function isSlotOperationConditionSatisfied(operation: SlotOperation, activeRoles: string[]): boolean;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { getAuthenticatedUser } from '../auth';
|
|
2
|
-
import {
|
|
2
|
+
import { getSiteConfig } from '../config';
|
|
3
3
|
export function getSlotOperations(ids, defaultOperation) {
|
|
4
4
|
const { apps } = getSiteConfig();
|
|
5
5
|
const ops = [];
|
|
@@ -19,7 +19,7 @@ export function getSlotOperations(ids, defaultOperation) {
|
|
|
19
19
|
}
|
|
20
20
|
return ops;
|
|
21
21
|
}
|
|
22
|
-
export function isSlotOperationConditionSatisfied(operation) {
|
|
22
|
+
export function isSlotOperationConditionSatisfied(operation, activeRoles) {
|
|
23
23
|
const { condition } = operation;
|
|
24
24
|
if ((condition === null || condition === void 0 ? void 0 : condition.authenticated) !== undefined) {
|
|
25
25
|
const isAuthenticated = getAuthenticatedUser() !== null;
|
|
@@ -29,7 +29,6 @@ export function isSlotOperationConditionSatisfied(operation) {
|
|
|
29
29
|
}
|
|
30
30
|
}
|
|
31
31
|
if ((condition === null || condition === void 0 ? void 0 : condition.active) !== undefined || (condition === null || condition === void 0 ? void 0 : condition.inactive) !== undefined) {
|
|
32
|
-
const activeRoles = getActiveRoles();
|
|
33
32
|
if ((condition === null || condition === void 0 ? void 0 : condition.active) !== undefined) {
|
|
34
33
|
let activeConditionRoleFound = false;
|
|
35
34
|
for (const conditionRole of condition.active) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../runtime/slots/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAC;AAC/C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../runtime/slots/utils.ts"],"names":[],"mappings":"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","sourcesContent":["import { getAuthenticatedUser } from '../auth';\nimport { getSiteConfig } from '../config';\nimport { SlotOperation } from './types';\n\nexport function getSlotOperations(ids: string[], defaultOperation?: SlotOperation) {\n const { apps } = getSiteConfig();\n const ops: SlotOperation[] = [];\n\n if (defaultOperation) {\n ops.push(defaultOperation);\n }\n\n if (apps) {\n apps.forEach((app) => {\n if (Array.isArray(app.slots)) {\n app.slots.forEach((operation) => {\n if (ids.includes(operation.slotId)) {\n ops.push(operation);\n }\n });\n }\n });\n }\n\n return ops;\n}\n\nexport function isSlotOperationConditionSatisfied(operation: SlotOperation, activeRoles: string[]) {\n const { condition } = operation;\n if (condition?.authenticated !== undefined) {\n const isAuthenticated = getAuthenticatedUser() !== null;\n // If we failed the authenticated condition, return false.\n if (condition.authenticated !== isAuthenticated) {\n return false;\n }\n }\n\n if (condition?.active !== undefined || condition?.inactive !== undefined) {\n if (condition?.active !== undefined) {\n let activeConditionRoleFound = false;\n for (const conditionRole of condition.active) {\n if (activeRoles.includes(conditionRole)) {\n activeConditionRoleFound = true;\n break;\n }\n }\n\n // If we couldn't find an active role in our list, then we've failed this condition.\n if (!activeConditionRoleFound) {\n return false;\n }\n }\n\n if (condition?.inactive !== undefined) {\n let inactiveConditionRoleFound = false;\n for (const conditionRole of condition.inactive) {\n if (activeRoles.includes(conditionRole)) {\n inactiveConditionRoleFound = true;\n break;\n }\n }\n\n // If we find an active role from our inactive list, then we've failed this condition.\n if (inactiveConditionRoleFound) {\n return false;\n }\n }\n }\n\n if (condition?.callback !== undefined && condition.callback() === false) {\n return false;\n }\n\n // If there was no condition, we return true.\n return true;\n}\n"]}
|
|
@@ -6,8 +6,7 @@ export declare function useSortedWidgetOperations(id: string): WidgetOperation[]
|
|
|
6
6
|
/**
|
|
7
7
|
* useWidgetOptions iterates through the slot's operations to find any that are "widget options"
|
|
8
8
|
* operations specific to this widget. It merges these into a single object and returns them -
|
|
9
|
-
* operations are merged in declaration order, meaning last one in wins.
|
|
10
|
-
* triggers a re-render when the options change.
|
|
9
|
+
* operations are merged in declaration order, meaning last one in wins.
|
|
11
10
|
*/
|
|
12
11
|
export declare function useWidgetOptions(): Record<string, unknown>;
|
|
13
12
|
export declare function useWidgetOptionsForId(slotId: string, widgetId: string): Record<string, unknown>;
|
|
@@ -9,7 +9,8 @@ var __rest = (this && this.__rest) || function (s, e) {
|
|
|
9
9
|
}
|
|
10
10
|
return t;
|
|
11
11
|
};
|
|
12
|
-
import { useContext,
|
|
12
|
+
import { useContext, useMemo } from 'react';
|
|
13
|
+
import useActiveRoles from '../../react/hooks/useActiveRoles';
|
|
13
14
|
import { useSlotContext, useSlotOperations } from '../hooks';
|
|
14
15
|
import { isSlotOperationConditionSatisfied } from '../utils';
|
|
15
16
|
import { createWidgets, isWidgetAbsoluteOperation, isWidgetOperation, isWidgetOptionsOperation, isWidgetRelativeOperation } from './utils';
|
|
@@ -25,56 +26,44 @@ export function useWidgetsForId(id, componentProps) {
|
|
|
25
26
|
}
|
|
26
27
|
export function useWidgetOperations(id) {
|
|
27
28
|
const operations = useSlotOperations(id);
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
const filteredOperations = operations.filter((operation) => {
|
|
31
|
-
return isWidgetOperation(operation) && isSlotOperationConditionSatisfied(operation);
|
|
32
|
-
});
|
|
33
|
-
setWidgetOperations(filteredOperations);
|
|
34
|
-
}, [operations]);
|
|
35
|
-
return widgetOperations;
|
|
29
|
+
const activeRoles = useActiveRoles();
|
|
30
|
+
return useMemo(() => operations.filter((operation) => (isWidgetOperation(operation) && isSlotOperationConditionSatisfied(operation, activeRoles))), [operations, activeRoles]);
|
|
36
31
|
}
|
|
37
32
|
export function useSortedWidgetOperations(id) {
|
|
38
33
|
const operations = useWidgetOperations(id);
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
34
|
+
return useMemo(() => (
|
|
35
|
+
// This sorts widget operations in an order that guarantees that any 'related' widgets
|
|
36
|
+
// needed by relatively positioned operations (INSERT_AFTER, INSERT_BEFORE) should already exist
|
|
37
|
+
// by the time the relative operations are evaluated. It means the declaration order of
|
|
38
|
+
// operations in SiteConfig does not prevent an operation from interacting with a widget that was
|
|
39
|
+
// declared 'later'.
|
|
40
|
+
[...operations].sort((a, b) => {
|
|
41
|
+
const aAbsolute = isWidgetAbsoluteOperation(a);
|
|
42
|
+
const bAbsolute = isWidgetAbsoluteOperation(b);
|
|
43
|
+
if (aAbsolute && bAbsolute) {
|
|
44
|
+
return 0;
|
|
45
|
+
}
|
|
46
|
+
else if (aAbsolute) {
|
|
47
|
+
return -1;
|
|
48
|
+
}
|
|
49
|
+
else if (bAbsolute) {
|
|
50
|
+
return 1;
|
|
51
|
+
}
|
|
52
|
+
else if (isWidgetRelativeOperation(a) && isWidgetRelativeOperation(b)) {
|
|
53
|
+
if (a.id === b.relatedId) {
|
|
54
54
|
return -1;
|
|
55
55
|
}
|
|
56
|
-
else if (
|
|
56
|
+
else if (b.id === a.relatedId) {
|
|
57
57
|
return 1;
|
|
58
58
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
}
|
|
63
|
-
else if (b.id === a.relatedId) {
|
|
64
|
-
return 1;
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
return 0;
|
|
68
|
-
});
|
|
69
|
-
setSortedOperations(sortedOperations);
|
|
70
|
-
}, [operations]);
|
|
71
|
-
return sortedOperations;
|
|
59
|
+
}
|
|
60
|
+
return 0;
|
|
61
|
+
})), [operations]);
|
|
72
62
|
}
|
|
73
63
|
/**
|
|
74
64
|
* useWidgetOptions iterates through the slot's operations to find any that are "widget options"
|
|
75
65
|
* operations specific to this widget. It merges these into a single object and returns them -
|
|
76
|
-
* operations are merged in declaration order, meaning last one in wins.
|
|
77
|
-
* triggers a re-render when the options change.
|
|
66
|
+
* operations are merged in declaration order, meaning last one in wins.
|
|
78
67
|
*/
|
|
79
68
|
export function useWidgetOptions() {
|
|
80
69
|
const { slotId, widgetId } = useContext(WidgetContext);
|
|
@@ -82,23 +71,14 @@ export function useWidgetOptions() {
|
|
|
82
71
|
}
|
|
83
72
|
export function useWidgetOptionsForId(slotId, widgetId) {
|
|
84
73
|
const operations = useWidgetOperations(slotId);
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (isSlotOperationConditionSatisfied(operation)) {
|
|
91
|
-
if (isWidgetOptionsOperation(operation)) {
|
|
92
|
-
if (operation.relatedId === widgetId) {
|
|
93
|
-
nextOptions = Object.assign(Object.assign({}, nextOptions), operation.options);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
}
|
|
74
|
+
return useMemo(() => {
|
|
75
|
+
let options = {};
|
|
76
|
+
for (const operation of operations) {
|
|
77
|
+
if (isWidgetOptionsOperation(operation) && operation.relatedId === widgetId) {
|
|
78
|
+
options = Object.assign(Object.assign({}, options), operation.options);
|
|
97
79
|
}
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
setOptions(findOptions());
|
|
80
|
+
}
|
|
81
|
+
return options;
|
|
101
82
|
}, [widgetId, operations]);
|
|
102
|
-
return options;
|
|
103
83
|
}
|
|
104
84
|
//# sourceMappingURL=hooks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../runtime/slots/widget/hooks.ts"],"names":[],"mappings":";;;;;;;;;;;AAAA,OAAO,EAAE,UAAU,EAAE,
|
|
1
|
+
{"version":3,"file":"hooks.js","sourceRoot":"","sources":["../../../../runtime/slots/widget/hooks.ts"],"names":[],"mappings":"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","sourcesContent":["import { useContext, useMemo } from 'react';\nimport useActiveRoles from '../../react/hooks/useActiveRoles';\nimport { useSlotContext, useSlotOperations } from '../hooks';\nimport { isSlotOperationConditionSatisfied } from '../utils';\nimport { WidgetList, WidgetOperation } from './types';\nimport { createWidgets, isWidgetAbsoluteOperation, isWidgetOperation, isWidgetOptionsOperation, isWidgetRelativeOperation } from './utils';\nimport WidgetContext from './WidgetContext';\n\nexport function useWidgets(): WidgetList {\n const { id, ...props } = useSlotContext();\n delete props.children;\n return useWidgetsForId(id, props);\n}\n\nexport function useWidgetsForId(id: string, componentProps?: Record<string, unknown>): WidgetList {\n const operations = useSortedWidgetOperations(id);\n return createWidgets(operations, componentProps);\n}\n\nexport function useWidgetOperations(id: string) {\n const operations = useSlotOperations(id);\n const activeRoles = useActiveRoles();\n\n return useMemo(\n () => operations.filter((operation): operation is WidgetOperation => (\n isWidgetOperation(operation) && isSlotOperationConditionSatisfied(operation, activeRoles)\n )),\n [operations, activeRoles],\n );\n}\n\nexport function useSortedWidgetOperations(id: string) {\n const operations = useWidgetOperations(id);\n\n return useMemo(() => (\n // This sorts widget operations in an order that guarantees that any 'related' widgets\n // needed by relatively positioned operations (INSERT_AFTER, INSERT_BEFORE) should already exist\n // by the time the relative operations are evaluated. It means the declaration order of\n // operations in SiteConfig does not prevent an operation from interacting with a widget that was\n // declared 'later'.\n [...operations].sort((a: WidgetOperation, b: WidgetOperation) => {\n const aAbsolute = isWidgetAbsoluteOperation(a);\n const bAbsolute = isWidgetAbsoluteOperation(b);\n if (aAbsolute && bAbsolute) {\n return 0;\n } else if (aAbsolute) {\n return -1;\n } else if (bAbsolute) {\n return 1;\n } else if (isWidgetRelativeOperation(a) && isWidgetRelativeOperation(b)) {\n if (a.id === b.relatedId) {\n return -1;\n } else if (b.id === a.relatedId) {\n return 1;\n }\n }\n return 0;\n })\n ), [operations]);\n}\n\n/**\n * useWidgetOptions iterates through the slot's operations to find any that are \"widget options\"\n * operations specific to this widget. It merges these into a single object and returns them -\n * operations are merged in declaration order, meaning last one in wins.\n */\nexport function useWidgetOptions() {\n const { slotId, widgetId } = useContext(WidgetContext);\n return useWidgetOptionsForId(slotId, widgetId);\n}\n\nexport function useWidgetOptionsForId(slotId: string, widgetId: string) {\n const operations = useWidgetOperations(slotId);\n\n return useMemo(() => {\n let options: Record<string, unknown> = {};\n for (const operation of operations) {\n if (isWidgetOptionsOperation(operation) && operation.relatedId === widgetId) {\n options = { ...options, ...operation.options };\n }\n }\n return options;\n }, [widgetId, operations]);\n}\n"]}
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
-
import { isSlotOperationConditionSatisfied } from '../utils';
|
|
3
2
|
import { IFrameWidget } from './iframe';
|
|
4
3
|
import { WidgetOperationTypes } from './types';
|
|
5
4
|
import WidgetProvider from './WidgetProvider';
|
|
@@ -158,25 +157,23 @@ function createWidgetList(identifiedWidgets) {
|
|
|
158
157
|
export function createWidgets(operations, componentProps) {
|
|
159
158
|
const identifiedWidgets = [];
|
|
160
159
|
for (const operation of operations) {
|
|
161
|
-
if (
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
removeWidget(operation, identifiedWidgets);
|
|
179
|
-
}
|
|
160
|
+
if (isWidgetAppendOperation(operation)) {
|
|
161
|
+
appendWidget(operation, identifiedWidgets, componentProps);
|
|
162
|
+
}
|
|
163
|
+
else if (isWidgetPrependOperation(operation)) {
|
|
164
|
+
prependWidget(operation, identifiedWidgets, componentProps);
|
|
165
|
+
}
|
|
166
|
+
else if (isWidgetInsertAfterOperation(operation)) {
|
|
167
|
+
insertAfterWidget(operation, identifiedWidgets, componentProps);
|
|
168
|
+
}
|
|
169
|
+
else if (isWidgetInsertBeforeOperation(operation)) {
|
|
170
|
+
insertBeforeWidget(operation, identifiedWidgets, componentProps);
|
|
171
|
+
}
|
|
172
|
+
else if (isWidgetReplaceOperation(operation)) {
|
|
173
|
+
replaceWidget(operation, identifiedWidgets, componentProps);
|
|
174
|
+
}
|
|
175
|
+
else if (isWidgetRemoveOperation(operation)) {
|
|
176
|
+
removeWidget(operation, identifiedWidgets);
|
|
180
177
|
}
|
|
181
178
|
}
|
|
182
179
|
return createWidgetList(identifiedWidgets);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../runtime/slots/widget/utils.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ReactNode } from 'react';\nimport { SlotOperation } from '../types';\nimport { isSlotOperationConditionSatisfied } from '../utils';\nimport { IFrameWidget } from './iframe';\nimport { IdentifiedWidget, WidgetAbsoluteOperation, WidgetAppendOperation, WidgetComponentProps, WidgetElementProps, WidgetIdentityProps, WidgetIFrameProps, WidgetInsertAfterOperation, WidgetInsertBeforeOperation, WidgetList, WidgetOperation, WidgetOperationTypes, WidgetOptionsOperation, WidgetPrependOperation, WidgetRemoveOperation, WidgetRendererOperation, WidgetRendererProps, WidgetReplaceOperation } from './types';\nimport WidgetProvider from './WidgetProvider';\n\nexport function isWidgetOperation(operation: SlotOperation): operation is WidgetOperation {\n return Object.values(WidgetOperationTypes).includes(operation.op as WidgetOperationTypes);\n}\n\nexport function isWidgetAbsoluteOperation(operation: WidgetOperation): operation is WidgetAbsoluteOperation {\n return operation.op === WidgetOperationTypes.APPEND || operation.op === WidgetOperationTypes.PREPEND;\n}\n\nexport function isWidgetRelativeOperation(operation: WidgetOperation): operation is (WidgetInsertAfterOperation | WidgetInsertBeforeOperation) {\n return operation.op === WidgetOperationTypes.INSERT_AFTER || operation.op === WidgetOperationTypes.INSERT_BEFORE;\n}\n\nexport function isWidgetAppendOperation(operation: SlotOperation): operation is WidgetAppendOperation {\n return isWidgetOperation(operation) && operation.op === WidgetOperationTypes.APPEND;\n}\n\nexport function isWidgetInsertAfterOperation(operation: SlotOperation): operation is WidgetInsertAfterOperation {\n return isWidgetOperation(operation) && operation.op === WidgetOperationTypes.INSERT_AFTER;\n}\n\nexport function isWidgetInsertBeforeOperation(operation: SlotOperation): operation is WidgetInsertBeforeOperation {\n return isWidgetOperation(operation) && operation.op === WidgetOperationTypes.INSERT_BEFORE;\n}\n\nexport function isWidgetPrependOperation(operation: SlotOperation): operation is WidgetPrependOperation {\n return isWidgetOperation(operation) && operation.op === WidgetOperationTypes.PREPEND;\n}\n\nexport function isWidgetRemoveOperation(operation: SlotOperation): operation is WidgetRemoveOperation {\n return isWidgetOperation(operation) && operation.op === WidgetOperationTypes.REMOVE;\n}\n\nexport function isWidgetReplaceOperation(operation: SlotOperation): operation is WidgetReplaceOperation {\n return isWidgetOperation(operation) && operation.op === WidgetOperationTypes.REPLACE;\n}\n\nexport function isWidgetOptionsOperation(operation: SlotOperation): operation is WidgetOptionsOperation {\n return isWidgetOperation(operation) && operation.op === WidgetOperationTypes.OPTIONS;\n}\n\nexport function isWidgetRendererOperation(operation: SlotOperation): operation is WidgetRendererOperation {\n return isWidgetOperation(operation) && hasWidgetRendererProps(operation);\n}\n\nexport function isWidgetIdentityOperation(operation: SlotOperation): operation is (WidgetOperation & WidgetIdentityProps) {\n return isWidgetOperation(operation) && hasWidgetIdentityProps(operation);\n}\n\nexport function isWidgetIdentityRoleOperation(operation: SlotOperation): operation is (WidgetOperation & WidgetIdentityProps & { role: string }) {\n return isWidgetIdentityOperation(operation) && hasWidgetIdentityRoleProps(operation);\n}\n\nexport function createWidgetAppendOperation(id: string, slotId: string, element: ReactNode) {\n let operation: WidgetOperation | undefined = undefined;\n if (element) {\n operation = {\n slotId,\n id,\n op: WidgetOperationTypes.APPEND,\n element\n };\n }\n\n return operation;\n}\n\n// Widget Operation props helpers\n\nfunction hasWidgetComponentProps(operation: WidgetOperation): operation is (WidgetOperation & WidgetComponentProps) {\n return isWidgetOperation(operation) && 'component' in operation;\n}\n\nfunction hasWidgetElementProps(operation: WidgetOperation): operation is (WidgetOperation & WidgetElementProps) {\n return isWidgetOperation(operation) && 'element' in operation;\n}\n\nfunction hasWidgetIFrameProps(operation: WidgetOperation): operation is (WidgetOperation & WidgetIFrameProps) {\n return isWidgetOperation(operation) && 'url' in operation && 'title' in operation;\n}\n\nfunction hasWidgetRendererProps(operation: WidgetOperation): operation is (WidgetOperation & WidgetRendererProps) {\n return hasWidgetComponentProps(operation) || hasWidgetElementProps(operation) || hasWidgetIFrameProps(operation);\n}\n\nfunction hasWidgetIdentityProps(operation: WidgetOperation): operation is (WidgetOperation & WidgetIdentityProps) {\n return isWidgetOperation(operation) && 'id' in operation;\n}\n\nfunction hasWidgetIdentityRoleProps(operation: WidgetOperation): operation is (WidgetOperation & WidgetIdentityProps & { role: string }) {\n return hasWidgetIdentityProps(operation) && 'role' in operation;\n}\n\n/**\n * An 'identified' widget just means a data structure with an ID and a ReactNode.\n */\nfunction createIdentifiedWidget(operation: WidgetRendererOperation, componentProps?: Record<string, unknown>) {\n let widget: ReactNode = null;\n const { id } = operation;\n if (hasWidgetComponentProps(operation)) {\n widget = (\n <operation.component {...componentProps} />\n );\n } else if (hasWidgetElementProps(operation)) {\n widget = operation.element;\n } else if (hasWidgetIFrameProps(operation)) {\n widget = (\n <IFrameWidget url={operation.url} title={operation.title} />\n );\n }\n\n return {\n id,\n role: operation.role,\n node: (\n <WidgetProvider key={id} slotId={operation.slotId} widgetId={operation.id} role={operation.role}>\n {widget}\n </WidgetProvider>\n ),\n };\n}\n\nfunction findRelatedWidgetIndex(id: string, widgets: IdentifiedWidget[]) {\n for (const candidateRelatedWidget of widgets) {\n if (candidateRelatedWidget.id === id) {\n return widgets.indexOf(candidateRelatedWidget);\n }\n }\n return null;\n}\n\nfunction appendWidget(operation: WidgetAppendOperation, widgets: IdentifiedWidget[], componentProps?: Record<string, unknown>) {\n const widget = createIdentifiedWidget(operation, componentProps);\n widgets.push(widget);\n}\n\nfunction prependWidget(operation: WidgetPrependOperation, widgets: IdentifiedWidget[], componentProps?: Record<string, unknown>) {\n const widget = createIdentifiedWidget(operation, componentProps);\n widgets.unshift(widget);\n}\n\nfunction insertAfterWidget(operation: WidgetInsertAfterOperation, widgets: IdentifiedWidget[], componentProps?: Record<string, unknown>) {\n const widget = createIdentifiedWidget(operation, componentProps);\n const relatedIndex = findRelatedWidgetIndex(operation.relatedId, widgets);\n if (relatedIndex !== null) {\n widgets.splice(relatedIndex + 1, 0, widget);\n }\n}\n\nfunction insertBeforeWidget(operation: WidgetInsertBeforeOperation, widgets: IdentifiedWidget[], componentProps?: Record<string, unknown>) {\n const widget = createIdentifiedWidget(operation, componentProps);\n const relatedIndex = findRelatedWidgetIndex(operation.relatedId, widgets);\n if (relatedIndex !== null) {\n widgets.splice(relatedIndex, 0, widget);\n }\n}\n\nfunction replaceWidget(operation: WidgetReplaceOperation, widgets: IdentifiedWidget[], componentProps?: Record<string, unknown>) {\n const widget = createIdentifiedWidget(operation, componentProps);\n const relatedIndex = findRelatedWidgetIndex(operation.relatedId, widgets);\n if (relatedIndex !== null) {\n widgets.splice(relatedIndex, 1, widget);\n }\n}\n\nfunction removeWidget(operation: WidgetRemoveOperation, widgets: IdentifiedWidget[]) {\n const relatedIndex = findRelatedWidgetIndex(operation.relatedId, widgets);\n if (relatedIndex !== null) {\n widgets.splice(relatedIndex, 1);\n }\n}\n\nfunction createWidgetList(identifiedWidgets: IdentifiedWidget[]): WidgetList {\n const nodes = identifiedWidgets.map(widget => widget.node);\n const widgetList = nodes as WidgetList;\n\n widgetList.identified = identifiedWidgets;\n\n widgetList.byId = (id: string): ReactNode[] => {\n return identifiedWidgets.filter(w => w.id === id).map(w => w.node);\n };\n\n widgetList.withoutId = (id: string): ReactNode[] => {\n return identifiedWidgets.filter(w => w.id !== id).map(w => w.node);\n };\n\n widgetList.byRole = (role: string): ReactNode[] => {\n return identifiedWidgets.filter(w => w.role === role).map(w => w.node);\n };\n\n widgetList.withoutRole = (role: string): ReactNode[] => {\n return identifiedWidgets.filter(w => w.role !== role).map(w => w.node);\n };\n\n return widgetList;\n}\n\nexport function createWidgets(operations: WidgetOperation[], componentProps?: Record<string, unknown>): WidgetList {\n const identifiedWidgets: IdentifiedWidget[] = [];\n\n for (const operation of operations) {\n if (isSlotOperationConditionSatisfied(operation)) {\n if (isWidgetAppendOperation(operation)) {\n appendWidget(operation, identifiedWidgets, componentProps);\n } else if (isWidgetPrependOperation(operation)) {\n prependWidget(operation, identifiedWidgets, componentProps);\n } else if (isWidgetInsertAfterOperation(operation)) {\n insertAfterWidget(operation, identifiedWidgets, componentProps);\n } else if (isWidgetInsertBeforeOperation(operation)) {\n insertBeforeWidget(operation, identifiedWidgets, componentProps);\n } else if (isWidgetReplaceOperation(operation)) {\n replaceWidget(operation, identifiedWidgets, componentProps);\n } else if (isWidgetRemoveOperation(operation)) {\n removeWidget(operation, identifiedWidgets);\n }\n }\n }\n\n return createWidgetList(identifiedWidgets);\n}\n"]}
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../../runtime/slots/widget/utils.tsx"],"names":[],"mappings":"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","sourcesContent":["import { ReactNode } from 'react';\nimport { SlotOperation } from '../types';\nimport { IFrameWidget } from './iframe';\nimport { IdentifiedWidget, WidgetAbsoluteOperation, WidgetAppendOperation, WidgetComponentProps, WidgetElementProps, WidgetIdentityProps, WidgetIFrameProps, WidgetInsertAfterOperation, WidgetInsertBeforeOperation, WidgetList, WidgetOperation, WidgetOperationTypes, WidgetOptionsOperation, WidgetPrependOperation, WidgetRemoveOperation, WidgetRendererOperation, WidgetRendererProps, WidgetReplaceOperation } from './types';\nimport WidgetProvider from './WidgetProvider';\n\nexport function isWidgetOperation(operation: SlotOperation): operation is WidgetOperation {\n return Object.values(WidgetOperationTypes).includes(operation.op as WidgetOperationTypes);\n}\n\nexport function isWidgetAbsoluteOperation(operation: WidgetOperation): operation is WidgetAbsoluteOperation {\n return operation.op === WidgetOperationTypes.APPEND || operation.op === WidgetOperationTypes.PREPEND;\n}\n\nexport function isWidgetRelativeOperation(operation: WidgetOperation): operation is (WidgetInsertAfterOperation | WidgetInsertBeforeOperation) {\n return operation.op === WidgetOperationTypes.INSERT_AFTER || operation.op === WidgetOperationTypes.INSERT_BEFORE;\n}\n\nexport function isWidgetAppendOperation(operation: SlotOperation): operation is WidgetAppendOperation {\n return isWidgetOperation(operation) && operation.op === WidgetOperationTypes.APPEND;\n}\n\nexport function isWidgetInsertAfterOperation(operation: SlotOperation): operation is WidgetInsertAfterOperation {\n return isWidgetOperation(operation) && operation.op === WidgetOperationTypes.INSERT_AFTER;\n}\n\nexport function isWidgetInsertBeforeOperation(operation: SlotOperation): operation is WidgetInsertBeforeOperation {\n return isWidgetOperation(operation) && operation.op === WidgetOperationTypes.INSERT_BEFORE;\n}\n\nexport function isWidgetPrependOperation(operation: SlotOperation): operation is WidgetPrependOperation {\n return isWidgetOperation(operation) && operation.op === WidgetOperationTypes.PREPEND;\n}\n\nexport function isWidgetRemoveOperation(operation: SlotOperation): operation is WidgetRemoveOperation {\n return isWidgetOperation(operation) && operation.op === WidgetOperationTypes.REMOVE;\n}\n\nexport function isWidgetReplaceOperation(operation: SlotOperation): operation is WidgetReplaceOperation {\n return isWidgetOperation(operation) && operation.op === WidgetOperationTypes.REPLACE;\n}\n\nexport function isWidgetOptionsOperation(operation: SlotOperation): operation is WidgetOptionsOperation {\n return isWidgetOperation(operation) && operation.op === WidgetOperationTypes.OPTIONS;\n}\n\nexport function isWidgetRendererOperation(operation: SlotOperation): operation is WidgetRendererOperation {\n return isWidgetOperation(operation) && hasWidgetRendererProps(operation);\n}\n\nexport function isWidgetIdentityOperation(operation: SlotOperation): operation is (WidgetOperation & WidgetIdentityProps) {\n return isWidgetOperation(operation) && hasWidgetIdentityProps(operation);\n}\n\nexport function isWidgetIdentityRoleOperation(operation: SlotOperation): operation is (WidgetOperation & WidgetIdentityProps & { role: string }) {\n return isWidgetIdentityOperation(operation) && hasWidgetIdentityRoleProps(operation);\n}\n\nexport function createWidgetAppendOperation(id: string, slotId: string, element: ReactNode) {\n let operation: WidgetOperation | undefined = undefined;\n if (element) {\n operation = {\n slotId,\n id,\n op: WidgetOperationTypes.APPEND,\n element\n };\n }\n\n return operation;\n}\n\n// Widget Operation props helpers\n\nfunction hasWidgetComponentProps(operation: WidgetOperation): operation is (WidgetOperation & WidgetComponentProps) {\n return isWidgetOperation(operation) && 'component' in operation;\n}\n\nfunction hasWidgetElementProps(operation: WidgetOperation): operation is (WidgetOperation & WidgetElementProps) {\n return isWidgetOperation(operation) && 'element' in operation;\n}\n\nfunction hasWidgetIFrameProps(operation: WidgetOperation): operation is (WidgetOperation & WidgetIFrameProps) {\n return isWidgetOperation(operation) && 'url' in operation && 'title' in operation;\n}\n\nfunction hasWidgetRendererProps(operation: WidgetOperation): operation is (WidgetOperation & WidgetRendererProps) {\n return hasWidgetComponentProps(operation) || hasWidgetElementProps(operation) || hasWidgetIFrameProps(operation);\n}\n\nfunction hasWidgetIdentityProps(operation: WidgetOperation): operation is (WidgetOperation & WidgetIdentityProps) {\n return isWidgetOperation(operation) && 'id' in operation;\n}\n\nfunction hasWidgetIdentityRoleProps(operation: WidgetOperation): operation is (WidgetOperation & WidgetIdentityProps & { role: string }) {\n return hasWidgetIdentityProps(operation) && 'role' in operation;\n}\n\n/**\n * An 'identified' widget just means a data structure with an ID and a ReactNode.\n */\nfunction createIdentifiedWidget(operation: WidgetRendererOperation, componentProps?: Record<string, unknown>) {\n let widget: ReactNode = null;\n const { id } = operation;\n if (hasWidgetComponentProps(operation)) {\n widget = (\n <operation.component {...componentProps} />\n );\n } else if (hasWidgetElementProps(operation)) {\n widget = operation.element;\n } else if (hasWidgetIFrameProps(operation)) {\n widget = (\n <IFrameWidget url={operation.url} title={operation.title} />\n );\n }\n\n return {\n id,\n role: operation.role,\n node: (\n <WidgetProvider key={id} slotId={operation.slotId} widgetId={operation.id} role={operation.role}>\n {widget}\n </WidgetProvider>\n ),\n };\n}\n\nfunction findRelatedWidgetIndex(id: string, widgets: IdentifiedWidget[]) {\n for (const candidateRelatedWidget of widgets) {\n if (candidateRelatedWidget.id === id) {\n return widgets.indexOf(candidateRelatedWidget);\n }\n }\n return null;\n}\n\nfunction appendWidget(operation: WidgetAppendOperation, widgets: IdentifiedWidget[], componentProps?: Record<string, unknown>) {\n const widget = createIdentifiedWidget(operation, componentProps);\n widgets.push(widget);\n}\n\nfunction prependWidget(operation: WidgetPrependOperation, widgets: IdentifiedWidget[], componentProps?: Record<string, unknown>) {\n const widget = createIdentifiedWidget(operation, componentProps);\n widgets.unshift(widget);\n}\n\nfunction insertAfterWidget(operation: WidgetInsertAfterOperation, widgets: IdentifiedWidget[], componentProps?: Record<string, unknown>) {\n const widget = createIdentifiedWidget(operation, componentProps);\n const relatedIndex = findRelatedWidgetIndex(operation.relatedId, widgets);\n if (relatedIndex !== null) {\n widgets.splice(relatedIndex + 1, 0, widget);\n }\n}\n\nfunction insertBeforeWidget(operation: WidgetInsertBeforeOperation, widgets: IdentifiedWidget[], componentProps?: Record<string, unknown>) {\n const widget = createIdentifiedWidget(operation, componentProps);\n const relatedIndex = findRelatedWidgetIndex(operation.relatedId, widgets);\n if (relatedIndex !== null) {\n widgets.splice(relatedIndex, 0, widget);\n }\n}\n\nfunction replaceWidget(operation: WidgetReplaceOperation, widgets: IdentifiedWidget[], componentProps?: Record<string, unknown>) {\n const widget = createIdentifiedWidget(operation, componentProps);\n const relatedIndex = findRelatedWidgetIndex(operation.relatedId, widgets);\n if (relatedIndex !== null) {\n widgets.splice(relatedIndex, 1, widget);\n }\n}\n\nfunction removeWidget(operation: WidgetRemoveOperation, widgets: IdentifiedWidget[]) {\n const relatedIndex = findRelatedWidgetIndex(operation.relatedId, widgets);\n if (relatedIndex !== null) {\n widgets.splice(relatedIndex, 1);\n }\n}\n\nfunction createWidgetList(identifiedWidgets: IdentifiedWidget[]): WidgetList {\n const nodes = identifiedWidgets.map(widget => widget.node);\n const widgetList = nodes as WidgetList;\n\n widgetList.identified = identifiedWidgets;\n\n widgetList.byId = (id: string): ReactNode[] => {\n return identifiedWidgets.filter(w => w.id === id).map(w => w.node);\n };\n\n widgetList.withoutId = (id: string): ReactNode[] => {\n return identifiedWidgets.filter(w => w.id !== id).map(w => w.node);\n };\n\n widgetList.byRole = (role: string): ReactNode[] => {\n return identifiedWidgets.filter(w => w.role === role).map(w => w.node);\n };\n\n widgetList.withoutRole = (role: string): ReactNode[] => {\n return identifiedWidgets.filter(w => w.role !== role).map(w => w.node);\n };\n\n return widgetList;\n}\n\nexport function createWidgets(operations: WidgetOperation[], componentProps?: Record<string, unknown>): WidgetList {\n const identifiedWidgets: IdentifiedWidget[] = [];\n\n for (const operation of operations) {\n if (isWidgetAppendOperation(operation)) {\n appendWidget(operation, identifiedWidgets, componentProps);\n } else if (isWidgetPrependOperation(operation)) {\n prependWidget(operation, identifiedWidgets, componentProps);\n } else if (isWidgetInsertAfterOperation(operation)) {\n insertAfterWidget(operation, identifiedWidgets, componentProps);\n } else if (isWidgetInsertBeforeOperation(operation)) {\n insertBeforeWidget(operation, identifiedWidgets, componentProps);\n } else if (isWidgetReplaceOperation(operation)) {\n replaceWidget(operation, identifiedWidgets, componentProps);\n } else if (isWidgetRemoveOperation(operation)) {\n removeWidget(operation, identifiedWidgets);\n }\n }\n\n return createWidgetList(identifiedWidgets);\n}\n"]}
|
package/dist/runtime/utils.js
CHANGED
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
*
|
|
4
4
|
* @module Utilities
|
|
5
5
|
*/
|
|
6
|
-
import camelCase from 'lodash
|
|
7
|
-
import snakeCase from 'lodash
|
|
6
|
+
import camelCase from 'lodash/camelCase';
|
|
7
|
+
import snakeCase from 'lodash/snakeCase';
|
|
8
8
|
/**
|
|
9
9
|
* This is the underlying function used by camelCaseObject, snakeCaseObject, and convertKeyNames
|
|
10
10
|
* above.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../runtime/utils.js"],"names":[],"mappings":"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","sourcesContent":["/**\n * #### Import members from **@openedx/frontend-base**\n *\n * @module Utilities\n */\nimport camelCase from 'lodash
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../runtime/utils.js"],"names":[],"mappings":"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","sourcesContent":["/**\n * #### Import members from **@openedx/frontend-base**\n *\n * @module Utilities\n */\nimport camelCase from 'lodash/camelCase';\nimport snakeCase from 'lodash/snakeCase';\n\n/**\n * This is the underlying function used by camelCaseObject, snakeCaseObject, and convertKeyNames\n * above.\n *\n * Given an object (or array) and a modification function, will perform the function on each key it\n * encounters on the object and its tree of children.\n *\n * The modification function must take a string as an argument and returns a string.\n *\n * Example:\n *\n * ```\n * (key) => {\n * if (key === 'edX') {\n * return 'Open edX';\n * }\n * return key;\n * }\n * ```\n *\n * This function will turn any key that matches 'edX' into 'Open edX'. All other keys will be\n * passed through unmodified.\n *\n * Can accept arrays as well as objects, and will perform its conversion on any objects it finds in\n * the array.\n *\n * @param {Object} object\n * @param {function} modify\n * @returns {Object}\n */\nexport function modifyObjectKeys(object, modify) {\n // If the passed in object is not an Object, return it.\n if (\n object === undefined\n || object === null\n || (typeof object !== 'object' && !Array.isArray(object))\n ) {\n return object;\n }\n\n if (Array.isArray(object)) {\n return object.map(value => modifyObjectKeys(value, modify));\n }\n\n // Otherwise, process all its keys.\n const result = {};\n Object.entries(object).forEach(([key, value]) => {\n result[modify(key)] = modifyObjectKeys(value, modify);\n });\n return result;\n}\n\n/**\n * Performs a deep conversion to camelCase on all keys in the provided object and its tree of\n * children. Uses [lodash.camelcase](https://lodash.com/docs/4.17.15#camelCase) on each key. This\n * is commonly used to convert snake_case keys in models from a backend server into camelCase keys\n * for use in the JavaScript client.\n *\n * Can accept arrays as well as objects, and will perform its conversion on any objects it finds in\n * the array.\n *\n * @param {Array|Object} object\n * @returns {Array|Object}\n */\nexport function camelCaseObject(object) {\n return modifyObjectKeys(object, camelCase);\n}\n\n/**\n * Performs a deep conversion to snake_case on all keys in the provided object and its tree of\n * children. Uses [lodash.snakecase](https://lodash.com/docs/4.17.15#snakeCase) on each key. This\n * is commonly used to convert camelCase keys from the JavaScript app into snake_case keys expected\n * by backend servers.\n *\n * Can accept arrays as well as objects, and will perform its conversion on any objects it finds in\n * the array.\n *\n * @param {Array|Object} object\n * @returns {Array|Object}\n */\nexport function snakeCaseObject(object) {\n return modifyObjectKeys(object, snakeCase);\n}\n\n/**\n * Given a map of key-value pairs, performs a deep conversion key names in the specified object\n * _from_ the key _to_ the value. This is useful for updating names in an API request to the names\n * used throughout a client application if they happen to differ. It can also be used in the\n * reverse - formatting names from the client application to names expected by an API.\n *\n * ```\n * import { convertKeyNames } from '@openedx/frontend-base';\n *\n * // This object can be of any shape or depth with subobjects/arrays.\n * const myObject = {\n * myKey: 'my value',\n * }\n *\n * const result = convertKeyNames(myObject, { myKey: 'their_key' });\n *\n * console.log(result) // { their_key: 'my value' }\n * ```\n *\n * Can accept arrays as well as objects, and will perform its conversion on any objects it finds in\n * the array.\n *\n * @param {Array|Object} object\n * @param {Object} nameMap\n * @returns {Array|Object}\n */\nexport function convertKeyNames(object, nameMap) {\n const transformer = key => (nameMap[key] === undefined ? key : nameMap[key]);\n\n return modifyObjectKeys(object, transformer);\n}\n\n/**\n * *Deprecated*: A method which converts the supplied query string into an object of\n * key-value pairs and returns it. Defaults to the current query string - should perform like\n * [window.searchParams](https://developer.mozilla.org/en-US/docs/Web/API/URL/searchParams)\n *\n * @deprecated\n * @param {string} [search=global.location.search]\n * @returns {Object}\n */\nexport function getQueryParameters(search = global.location.search) {\n const keyValueFragments = search\n .slice(search.indexOf('?') + 1)\n .split('&')\n .filter(hash => hash !== '');\n\n return keyValueFragments.reduce((params, keyValueFragment) => {\n const split = keyValueFragment.indexOf('=');\n const key = keyValueFragment.slice(0, split);\n const value = keyValueFragment.slice(split + 1);\n return Object.assign(params, { [key]: decodeURIComponent(value) });\n }, {});\n}\n\nexport function isValidVariableName(name) {\n // Check if the name is a string and not empty\n if (typeof name !== 'string' || name === '') {\n return false;\n }\n\n // Check if the first character is a letter, underscore, or dollar sign\n if (!/^[a-zA-Z_$]/.test(name)) {\n return false;\n }\n\n // Check if the name contains only letters, numbers, underscores, or dollar signs\n if (!/^[a-zA-Z0-9_$]+$/.test(name)) {\n return false;\n }\n\n // Check if the name is a reserved keyword\n const reservedKeywords = [\n 'break', 'case', 'catch', 'class', 'const', 'continue',\n 'debugger', 'default', 'delete', 'do', 'else', 'enum',\n 'export', 'extends', 'false', 'finally', 'for', 'function',\n 'if', 'import', 'in', 'instanceof', 'new', 'null', 'return',\n 'super', 'switch', 'this', 'throw', 'true', 'try',\n 'typeof', 'var', 'void', 'while', 'with', 'yield'\n ];\n if (reservedKeywords.includes(name)) {\n return false;\n }\n\n return true;\n}\n"]}
|
|
@@ -54,7 +54,12 @@ const messages = defineMessages({
|
|
|
54
54
|
id: 'footer.revealLinks.more',
|
|
55
55
|
defaultMessage: 'More',
|
|
56
56
|
description: 'Text for a button that reveals more links and content in the footer.',
|
|
57
|
-
}
|
|
57
|
+
},
|
|
58
|
+
'header.help': {
|
|
59
|
+
id: 'header.help',
|
|
60
|
+
defaultMessage: 'Help',
|
|
61
|
+
description: 'Help link in the global header that points to documentation or support.',
|
|
62
|
+
},
|
|
58
63
|
});
|
|
59
64
|
export default messages;
|
|
60
65
|
//# sourceMappingURL=Shell.messages.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Shell.messages.js","sourceRoot":"","sources":["../../shell/Shell.messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,4BAA4B,EAAE;QAC5B,EAAE,EAAE,4BAA4B;QAChC,cAAc,EAAE,WAAW;QAC3B,WAAW,EAAE,4BAA4B;KAC1C;IACD,yBAAyB,EAAE;QACzB,EAAE,EAAE,yBAAyB;QAC7B,cAAc,EAAE,QAAQ;QACxB,WAAW,EAAE,aAAa;KAC3B;IACD,0BAA0B,EAAE;QAC1B,EAAE,EAAE,0BAA0B;QAC9B,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,0BAA0B;KACxC;IACD,0BAA0B,EAAE;QAC1B,EAAE,EAAE,0BAA0B;QAC9B,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,0BAA0B;KACxC;IACD,gCAAgC,EAAE;QAChC,EAAE,EAAE,gCAAgC;QACpC,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,uBAAuB;KACrC;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,wBAAwB;QAC5B,cAAc,EAAE,OAAO;QACvB,WAAW,EAAE,YAAY;KAC1B;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,2BAA2B;QAC/B,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,sBAAsB;KACpC;IACD,WAAW,EAAE;QACX,EAAE,EAAE,+BAA+B;QACnC,cAAc,EAAE,uBAAuB;QACvC,WAAW,EAAE,uFAAuF;KACrG;IACD,eAAe,EAAE;QACf,EAAE,EAAE,mBAAmB;QACvB,cAAc,EAAE,qBAAqB;QACrC,WAAW,EAAE,wEAAwE;KACtF;IACD,qBAAqB,EAAE;QACrB,EAAE,EAAE,yBAAyB;QAC7B,cAAc,EAAE,wDAAwD;QACxE,WAAW,EAAE,+HAA+H;KAC7I;IACD,yBAAyB,EAAE;QACzB,EAAE,EAAE,yBAAyB;QAC7B,cAAc,EAAE,MAAM;QACtB,WAAW,EAAE,sEAAsE;KACpF;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '../runtime';\n\nconst messages = defineMessages({\n 'header.user.menu.dashboard': {\n id: 'header.user.menu.dashboard',\n defaultMessage: 'Dashboard',\n description: 'Link to the user dashboard',\n },\n 'header.user.menu.logout': {\n id: 'header.user.menu.logout',\n defaultMessage: 'Logout',\n description: 'Logout link',\n },\n 'header.user.menu.profile': {\n id: 'header.user.menu.profile',\n defaultMessage: 'Profile',\n description: 'Link to the user profile',\n },\n 'header.user.menu.account': {\n id: 'header.user.menu.account',\n defaultMessage: 'Account',\n description: 'Link to account settings',\n },\n 'header.user.menu.order.history': {\n id: 'header.user.menu.order.history',\n defaultMessage: 'Order History',\n description: 'Link to order history',\n },\n 'header.user.menu.login': {\n id: 'header.user.menu.login',\n defaultMessage: 'Login',\n description: 'Login link',\n },\n 'header.user.menu.register': {\n id: 'header.user.menu.register',\n defaultMessage: 'Sign Up',\n description: 'Link to registration',\n },\n skipNavLink: {\n id: 'header.navigation.skipNavLink',\n defaultMessage: 'Skip to main content.',\n description: 'A link used by screen readers to allow users to skip to the main content of the page.',\n },\n footerPoweredBy: {\n id: 'footer.powered.by',\n defaultMessage: 'Powered by Open edX',\n description: 'Alt text for the \\'Powered by Open edX\\' logo displayed in the footer.',\n },\n footerTrademarkNotice: {\n id: 'footer.trademark.notice',\n defaultMessage: 'edX and Open edX are registered trademarks of edX LLC.',\n description: 'A legal notice that \"edX LLC\" owns the trademarks on \"edX\" and \"Open edX\". Please do not translate these three proper names.'\n },\n 'footer.revealLinks.more': {\n id: 'footer.revealLinks.more',\n defaultMessage: 'More',\n description: 'Text for a button that reveals more links and content in the footer.',\n }\n});\n\nexport default messages;\n"]}
|
|
1
|
+
{"version":3,"file":"Shell.messages.js","sourceRoot":"","sources":["../../shell/Shell.messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAE5C,MAAM,QAAQ,GAAG,cAAc,CAAC;IAC9B,4BAA4B,EAAE;QAC5B,EAAE,EAAE,4BAA4B;QAChC,cAAc,EAAE,WAAW;QAC3B,WAAW,EAAE,4BAA4B;KAC1C;IACD,yBAAyB,EAAE;QACzB,EAAE,EAAE,yBAAyB;QAC7B,cAAc,EAAE,QAAQ;QACxB,WAAW,EAAE,aAAa;KAC3B;IACD,0BAA0B,EAAE;QAC1B,EAAE,EAAE,0BAA0B;QAC9B,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,0BAA0B;KACxC;IACD,0BAA0B,EAAE;QAC1B,EAAE,EAAE,0BAA0B;QAC9B,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,0BAA0B;KACxC;IACD,gCAAgC,EAAE;QAChC,EAAE,EAAE,gCAAgC;QACpC,cAAc,EAAE,eAAe;QAC/B,WAAW,EAAE,uBAAuB;KACrC;IACD,wBAAwB,EAAE;QACxB,EAAE,EAAE,wBAAwB;QAC5B,cAAc,EAAE,OAAO;QACvB,WAAW,EAAE,YAAY;KAC1B;IACD,2BAA2B,EAAE;QAC3B,EAAE,EAAE,2BAA2B;QAC/B,cAAc,EAAE,SAAS;QACzB,WAAW,EAAE,sBAAsB;KACpC;IACD,WAAW,EAAE;QACX,EAAE,EAAE,+BAA+B;QACnC,cAAc,EAAE,uBAAuB;QACvC,WAAW,EAAE,uFAAuF;KACrG;IACD,eAAe,EAAE;QACf,EAAE,EAAE,mBAAmB;QACvB,cAAc,EAAE,qBAAqB;QACrC,WAAW,EAAE,wEAAwE;KACtF;IACD,qBAAqB,EAAE;QACrB,EAAE,EAAE,yBAAyB;QAC7B,cAAc,EAAE,wDAAwD;QACxE,WAAW,EAAE,+HAA+H;KAC7I;IACD,yBAAyB,EAAE;QACzB,EAAE,EAAE,yBAAyB;QAC7B,cAAc,EAAE,MAAM;QACtB,WAAW,EAAE,sEAAsE;KACpF;IACD,aAAa,EAAE;QACb,EAAE,EAAE,aAAa;QACjB,cAAc,EAAE,MAAM;QACtB,WAAW,EAAE,yEAAyE;KACvF;CACF,CAAC,CAAC;AAEH,eAAe,QAAQ,CAAC","sourcesContent":["import { defineMessages } from '../runtime';\n\nconst messages = defineMessages({\n 'header.user.menu.dashboard': {\n id: 'header.user.menu.dashboard',\n defaultMessage: 'Dashboard',\n description: 'Link to the user dashboard',\n },\n 'header.user.menu.logout': {\n id: 'header.user.menu.logout',\n defaultMessage: 'Logout',\n description: 'Logout link',\n },\n 'header.user.menu.profile': {\n id: 'header.user.menu.profile',\n defaultMessage: 'Profile',\n description: 'Link to the user profile',\n },\n 'header.user.menu.account': {\n id: 'header.user.menu.account',\n defaultMessage: 'Account',\n description: 'Link to account settings',\n },\n 'header.user.menu.order.history': {\n id: 'header.user.menu.order.history',\n defaultMessage: 'Order History',\n description: 'Link to order history',\n },\n 'header.user.menu.login': {\n id: 'header.user.menu.login',\n defaultMessage: 'Login',\n description: 'Login link',\n },\n 'header.user.menu.register': {\n id: 'header.user.menu.register',\n defaultMessage: 'Sign Up',\n description: 'Link to registration',\n },\n skipNavLink: {\n id: 'header.navigation.skipNavLink',\n defaultMessage: 'Skip to main content.',\n description: 'A link used by screen readers to allow users to skip to the main content of the page.',\n },\n footerPoweredBy: {\n id: 'footer.powered.by',\n defaultMessage: 'Powered by Open edX',\n description: 'Alt text for the \\'Powered by Open edX\\' logo displayed in the footer.',\n },\n footerTrademarkNotice: {\n id: 'footer.trademark.notice',\n defaultMessage: 'edX and Open edX are registered trademarks of edX LLC.',\n description: 'A legal notice that \"edX LLC\" owns the trademarks on \"edX\" and \"Open edX\". Please do not translate these three proper names.'\n },\n 'footer.revealLinks.more': {\n id: 'footer.revealLinks.more',\n defaultMessage: 'More',\n description: 'Text for a button that reveals more links and content in the footer.',\n },\n 'header.help': {\n id: 'header.help',\n defaultMessage: 'Help',\n description: 'Help link in the global header that points to documentation or support.',\n },\n});\n\nexport default messages;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import LinkMenuItem from '../menus/LinkMenuItem';
|
|
3
|
+
import messages from '../Shell.messages';
|
|
4
|
+
export default function HelpButton({ getUrl }) {
|
|
5
|
+
const url = getUrl();
|
|
6
|
+
if (!url)
|
|
7
|
+
return null;
|
|
8
|
+
return (_jsx(LinkMenuItem, { label: messages['header.help'], url: url, variant: "navLink" }));
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=HelpButton.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HelpButton.js","sourceRoot":"","sources":["../../../shell/header/HelpButton.tsx"],"names":[],"mappings":";AAAA,OAAO,YAAY,MAAM,uBAAuB,CAAC;AACjD,OAAO,QAAQ,MAAM,mBAAmB,CAAC;AAMzC,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,EAAE,MAAM,EAAmB;IAC5D,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAC;IACtB,OAAO,CACL,KAAC,YAAY,IACX,KAAK,EAAE,QAAQ,CAAC,aAAa,CAAC,EAC9B,GAAG,EAAE,GAAG,EACR,OAAO,EAAC,SAAS,GACjB,CACH,CAAC;AACJ,CAAC","sourcesContent":["import LinkMenuItem from '../menus/LinkMenuItem';\nimport messages from '../Shell.messages';\n\ninterface HelpButtonProps {\n getUrl: () => string | undefined,\n}\n\nexport default function HelpButton({ getUrl }: HelpButtonProps) {\n const url = getUrl();\n if (!url) return null;\n return (\n <LinkMenuItem\n label={messages['header.help']}\n url={url}\n variant=\"navLink\"\n />\n );\n}\n"]}
|
|
@@ -11,4 +11,10 @@ header {
|
|
|
11
11
|
color: var(--pgn-color-active, #fff);
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
|
+
|
|
15
|
+
// Secondary-nav cluster sits flush against whatever's to its left
|
|
16
|
+
// (notifications bell, etc.) — those neighbors bring their own padding.
|
|
17
|
+
.secondary-nav-links > :first-child {
|
|
18
|
+
padding-left: 0;
|
|
19
|
+
}
|
|
14
20
|
}
|
|
@@ -2,6 +2,6 @@ import { jsx as _jsx } from "react/jsx-runtime";
|
|
|
2
2
|
import { Nav } from '@openedx/paragon';
|
|
3
3
|
import { Slot } from '../../../runtime';
|
|
4
4
|
export default function SecondaryNavLinks() {
|
|
5
|
-
return (_jsx(Nav, { className: "flex-nowrap", children: _jsx(Slot, { id: "org.openedx.frontend.slot.header.secondaryLinks.v1" }) }));
|
|
5
|
+
return (_jsx(Nav, { className: "flex-nowrap secondary-nav-links", children: _jsx(Slot, { id: "org.openedx.frontend.slot.header.secondaryLinks.v1" }) }));
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=SecondaryNavLinks.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SecondaryNavLinks.js","sourceRoot":"","sources":["../../../../shell/header/desktop/SecondaryNavLinks.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,MAAM,CAAC,OAAO,UAAU,iBAAiB;IACvC,OAAO,CACL,KAAC,GAAG,IAAC,SAAS,EAAC,
|
|
1
|
+
{"version":3,"file":"SecondaryNavLinks.js","sourceRoot":"","sources":["../../../../shell/header/desktop/SecondaryNavLinks.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAExC,MAAM,CAAC,OAAO,UAAU,iBAAiB;IACvC,OAAO,CACL,KAAC,GAAG,IAAC,SAAS,EAAC,iCAAiC,YAC9C,KAAC,IAAI,IAAC,EAAE,EAAC,oDAAoD,GAAG,GAC5D,CACP,CAAC;AACJ,CAAC","sourcesContent":["import { Nav } from '@openedx/paragon';\nimport { Slot } from '../../../runtime';\n\nexport default function SecondaryNavLinks() {\n return (\n <Nav className=\"flex-nowrap secondary-nav-links\">\n <Slot id=\"org.openedx.frontend.slot.header.secondaryLinks.v1\" />\n </Nav>\n );\n}\n"]}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { jsx as _jsx } from "react/jsx-runtime";
|
|
2
|
+
import { getAppConfig, WidgetOperationTypes } from '../../runtime';
|
|
3
|
+
import HelpButton from './HelpButton';
|
|
4
|
+
export const helpWidgetId = 'org.openedx.frontend.widget.header.help.v1';
|
|
5
|
+
export function helpButtonSlotOperation({ appId, role }) {
|
|
6
|
+
return {
|
|
7
|
+
slotId: 'org.openedx.frontend.slot.header.secondaryLinks.v1',
|
|
8
|
+
id: helpWidgetId,
|
|
9
|
+
op: WidgetOperationTypes.APPEND,
|
|
10
|
+
element: (_jsx(HelpButton, { getUrl: () => getAppConfig(appId).SUPPORT_URL })),
|
|
11
|
+
condition: { active: [role] },
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=helpButtonSlotOperation.js.map
|
|
@@ -0,0 +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, 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,3 +1,5 @@
|
|
|
1
1
|
export { default as headerApp } from './app';
|
|
2
2
|
export { providesCourseNavigationRolesId } from './constants';
|
|
3
3
|
export { default as Header } from './Header';
|
|
4
|
+
export { default as HelpButton } from './HelpButton';
|
|
5
|
+
export { helpButtonSlotOperation, helpWidgetId } from './helpButtonSlotOperation';
|
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
export { default as headerApp } from './app';
|
|
2
2
|
export { providesCourseNavigationRolesId } from './constants';
|
|
3
3
|
export { default as Header } from './Header';
|
|
4
|
+
export { default as HelpButton } from './HelpButton';
|
|
5
|
+
export { helpButtonSlotOperation, helpWidgetId } from './helpButtonSlotOperation';
|
|
4
6
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../shell/header/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC","sourcesContent":["export { default as headerApp } from './app';\nexport { providesCourseNavigationRolesId } from './constants';\nexport { default as Header } from './Header';\n"]}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../shell/header/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,IAAI,SAAS,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAE,+BAA+B,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,OAAO,IAAI,MAAM,EAAE,MAAM,UAAU,CAAC;AAC7C,OAAO,EAAE,OAAO,IAAI,UAAU,EAAE,MAAM,cAAc,CAAC;AACrD,OAAO,EAAE,uBAAuB,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC","sourcesContent":["export { default as headerApp } from './app';\nexport { providesCourseNavigationRolesId } from './constants';\nexport { default as Header } from './Header';\nexport { default as HelpButton } from './HelpButton';\nexport { helpButtonSlotOperation, helpWidgetId } from './helpButtonSlotOperation';\n"]}
|