@edifice.io/react 2.3.2-develop-wl.20250925113622 → 2.3.2-develop-b2school.20251001090200
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/components/Avatar/Avatar.d.ts +5 -0
- package/dist/components/Avatar/Avatar.js +8 -2
- package/dist/components/AvatarGroup/AvatarGroup.d.ts +10 -0
- package/dist/components/AvatarGroup/AvatarGroup.js +5 -5
- package/dist/components/Dropdown/Dropdown.d.ts +10 -4
- package/dist/components/Dropdown/Dropdown.js +24 -8
- package/dist/components/Flex/Flex.d.ts +2 -1
- package/dist/components/Flex/Flex.js +8 -6
- package/dist/components/Layout/Layout.d.ts +5 -1
- package/dist/components/Layout/Layout.js +5 -2
- package/dist/components/Layout/components/Header.js +2 -3
- package/dist/components/Layout/components/WidgetApps.js +1 -1
- package/dist/components/Layout/hooks/useHeader.js +4 -11
- package/dist/components/RadioCard/RadioCard.d.ts +37 -0
- package/dist/components/RadioCard/index.d.ts +2 -0
- package/dist/components/StackedGroup/StackedGroup.d.ts +5 -0
- package/dist/components/StackedGroup/StackedGroup.js +10 -8
- package/dist/components/Stepper/Stepper.d.ts +18 -0
- package/dist/components/Stepper/Stepper.js +15 -0
- package/dist/components/Stepper/index.d.ts +1 -0
- package/dist/components/Tabs/components/Tabs.d.ts +27 -3
- package/dist/components/Tabs/components/Tabs.js +9 -3
- package/dist/components/Tabs/components/TabsList.d.ts +15 -1
- package/dist/components/Tabs/components/TabsList.js +15 -5
- package/dist/components/Tabs/components/TabsPanel.d.ts +9 -1
- package/dist/components/Tabs/components/TabsPanel.js +8 -3
- package/dist/components/index.d.ts +1 -0
- package/dist/editor.js +18 -16
- package/dist/hooks/useDropdown/useDropdown.d.ts +2 -0
- package/dist/hooks/useDropdown/useDropdown.js +2 -0
- package/dist/icons-nav.js +28 -26
- package/dist/icons.js +190 -184
- package/dist/index.js +124 -120
- package/dist/modules/editor/components/MathsModal/MathsModal.js +1 -1
- package/dist/modules/editor/components/NodeView/IframeNodeView.d.ts +2 -0
- package/dist/modules/editor/components/NodeView/IframeNodeView.js +10 -0
- package/dist/modules/editor/components/NodeView/index.d.ts +1 -0
- package/dist/modules/editor/components/Renderer/MediaRenderer.js +20 -6
- package/dist/modules/editor/components/Toolbar/TableToolbar.AddMenu.js +1 -1
- package/dist/modules/editor/components/Toolbar/TableToolbar.DelMenu.js +1 -1
- package/dist/modules/editor/hooks/useResizeMedia.d.ts +4 -1
- package/dist/modules/editor/hooks/useResizeMedia.js +33 -21
- package/dist/modules/editor/hooks/useTipTapEditor.js +4 -4
- package/dist/modules/icons/components/IconMegaphone.d.ts +7 -0
- package/dist/modules/icons/components/IconMegaphone.js +12 -0
- package/dist/modules/icons/components/IconNotes.d.ts +7 -0
- package/dist/modules/icons/components/IconNotes.js +13 -0
- package/dist/modules/icons/components/IconUnion.d.ts +7 -0
- package/dist/modules/icons/components/IconUnion.js +15 -0
- package/dist/modules/icons/components/apps/IconCommunities.js +2 -2
- package/dist/modules/icons/components/index.d.ts +3 -0
- package/dist/modules/icons/components/nav/IconCommunities.d.ts +7 -0
- package/dist/modules/icons/components/nav/IconCommunities.js +12 -0
- package/dist/modules/icons/components/nav/index.d.ts +1 -0
- package/dist/modules/modals/OnboardingModal/OnboardingModal.js +1 -1
- package/dist/modules/modals/ResourceModal/ResourceModal.d.ts +57 -2
- package/dist/modules/modals/ResourceModal/ResourceModal.js +20 -16
- package/dist/modules/modals/ShareModal/ShareBookmarkLine.d.ts +1 -1
- package/dist/modules/modals/ShareModal/ShareBookmarkLine.js +12 -6
- package/dist/modules/modals/ShareModal/ShareModal.js +2 -0
- package/dist/modules/modals/ShareModal/hooks/useShareRightDisabled.d.ts +8 -0
- package/dist/modules/modals/ShareModal/hooks/useShareRightDisabled.js +11 -0
- package/dist/modules/modals/ShareModal/hooks/useShareRightVisible.d.ts +11 -0
- package/dist/modules/modals/ShareModal/hooks/useShareRightVisible.js +11 -0
- package/dist/modules/multimedia/FileCard/FileCard.d.ts +13 -2
- package/dist/modules/multimedia/FileCard/FileCard.js +15 -5
- package/dist/modules/multimedia/FileCard/FileIcon.d.ts +5 -1
- package/dist/modules/multimedia/FileCard/FileIcon.js +2 -2
- package/dist/modules/multimedia/Linker/InternalLinker/InternalLinker.d.ts +3 -1
- package/dist/modules/multimedia/Linker/InternalLinker/InternalLinker.js +7 -6
- package/dist/modules/multimedia/MediaLibrary/MediaLibrary.d.ts +3 -1
- package/dist/modules/multimedia/MediaLibrary/MediaLibrary.js +7 -2
- package/dist/modules/multimedia/index.d.ts +1 -0
- package/dist/multimedia.js +12 -10
- package/package.json +7 -9
|
@@ -3,9 +3,9 @@ const SvgIconCommunities = ({
|
|
|
3
3
|
title,
|
|
4
4
|
titleId,
|
|
5
5
|
...props
|
|
6
|
-
}) => /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0
|
|
6
|
+
}) => /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", fill: "none", viewBox: "0 0 50 50", "aria-hidden": "true", "aria-labelledby": titleId, ...props, children: [
|
|
7
7
|
title ? /* @__PURE__ */ jsx("title", { id: titleId, children: title }) : null,
|
|
8
|
-
/* @__PURE__ */ jsx("path", { d: "M25.807 33.165c4.726.17 8 3.997 8 8.5 0 .984-.795 1.775-1.775 1.775H18.977a1.774 1.774 0 0 1-1.776-1.775v-.201h-.004a8.303 8.303 0 0 1 8.61-8.299M8.61 24.451c4.726.17 8.001 3.997 8.001 8.5 0 .984-.796 1.776-1.775 1.776H1.776A1.774 1.774 0 0 1 0 32.95v-.201a8.303 8.303 0 0 1 8.61-8.299M41.61 24.006c4.499.162 8.001 3.996 8.001 8.5 0 .984-.796 1.775-1.775 1.775H34.779a1.774 1.774 0 0 1-1.775-1.775v-.201H33a8.303 8.303 0 0 1 8.61-8.3M25.142 20a5.143 5.143 0 1 1 0 10.285 5.143 5.143 0 0 1 0-10.285M8.308 11.627a5.141 5.141 0 1 1 0 10.282 5.141 5.141 0 0 1 0-10.282M41.691 11.627a5.142 5.142 0 1 1 .001 10.284 5.142 5.142 0 0 1 0-10.284M24.997 5.557a5.143 5.143 0 1 1 0 10.285 5.143 5.143 0 0 1 0-10.285" })
|
|
8
|
+
/* @__PURE__ */ jsx("path", { fill: "currentColor", d: "M25.807 33.165c4.726.17 8 3.997 8 8.5 0 .984-.795 1.775-1.775 1.775H18.977a1.774 1.774 0 0 1-1.776-1.775v-.201h-.004a8.303 8.303 0 0 1 8.61-8.299M8.61 24.451c4.726.17 8.001 3.997 8.001 8.5 0 .984-.796 1.776-1.775 1.776H1.776A1.774 1.774 0 0 1 0 32.95v-.201a8.303 8.303 0 0 1 8.61-8.299M41.61 24.006c4.499.162 8.001 3.996 8.001 8.5 0 .984-.796 1.775-1.775 1.775H34.779a1.774 1.774 0 0 1-1.775-1.775v-.201H33a8.303 8.303 0 0 1 8.61-8.3M25.142 20a5.143 5.143 0 1 1 0 10.285 5.143 5.143 0 0 1 0-10.285M8.308 11.627a5.141 5.141 0 1 1 0 10.282 5.141 5.141 0 0 1 0-10.282M41.691 11.627a5.142 5.142 0 1 1 .001 10.284 5.142 5.142 0 0 1 0-10.284M24.997 5.557a5.143 5.143 0 1 1 0 10.285 5.143 5.143 0 0 1 0-10.285" })
|
|
9
9
|
] });
|
|
10
10
|
export {
|
|
11
11
|
SvgIconCommunities as default
|
|
@@ -75,6 +75,7 @@ export { default as IconLoader } from './IconLoader';
|
|
|
75
75
|
export { default as IconLock } from './IconLock';
|
|
76
76
|
export { default as IconMailRecall } from './IconMailRecall';
|
|
77
77
|
export { default as IconMail } from './IconMail';
|
|
78
|
+
export { default as IconMegaphone } from './IconMegaphone';
|
|
78
79
|
export { default as IconMergeCells } from './IconMergeCells';
|
|
79
80
|
export { default as IconMessageInfo } from './IconMessageInfo';
|
|
80
81
|
export { default as IconMicOff } from './IconMicOff';
|
|
@@ -82,6 +83,7 @@ export { default as IconMic } from './IconMic';
|
|
|
82
83
|
export { default as IconMinus } from './IconMinus';
|
|
83
84
|
export { default as IconMove } from './IconMove';
|
|
84
85
|
export { default as IconNoColors } from './IconNoColors';
|
|
86
|
+
export { default as IconNotes } from './IconNotes';
|
|
85
87
|
export { default as IconNotification } from './IconNotification';
|
|
86
88
|
export { default as IconOptions } from './IconOptions';
|
|
87
89
|
export { default as IconOrderedList } from './IconOrderedList';
|
|
@@ -153,6 +155,7 @@ export { default as IconTool } from './IconTool';
|
|
|
153
155
|
export { default as IconTrendingUp } from './IconTrendingUp';
|
|
154
156
|
export { default as IconUndoAll } from './IconUndoAll';
|
|
155
157
|
export { default as IconUndo } from './IconUndo';
|
|
158
|
+
export { default as IconUnion } from './IconUnion';
|
|
156
159
|
export { default as IconUnlink } from './IconUnlink';
|
|
157
160
|
export { default as IconUnlock } from './IconUnlock';
|
|
158
161
|
export { default as IconUnreadMail } from './IconUnreadMail';
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { SVGProps } from 'react';
|
|
2
|
+
interface SVGRProps {
|
|
3
|
+
title?: string;
|
|
4
|
+
titleId?: string;
|
|
5
|
+
}
|
|
6
|
+
declare const SvgIconCommunities: ({ title, titleId, ...props }: SVGProps<SVGSVGElement> & SVGRProps) => import("react/jsx-runtime").JSX.Element;
|
|
7
|
+
export default SvgIconCommunities;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
+
const SvgIconCommunities = ({
|
|
3
|
+
title,
|
|
4
|
+
titleId,
|
|
5
|
+
...props
|
|
6
|
+
}) => /* @__PURE__ */ jsxs("svg", { xmlns: "http://www.w3.org/2000/svg", width: "24", height: "24", viewBox: "0 0 50 50", "aria-hidden": "true", "aria-labelledby": titleId, ...props, children: [
|
|
7
|
+
title ? /* @__PURE__ */ jsx("title", { id: titleId, children: title }) : null,
|
|
8
|
+
/* @__PURE__ */ jsx("path", { d: "M25.807 33.165c4.726.17 8 3.997 8 8.5 0 .984-.795 1.775-1.775 1.775H18.977a1.774 1.774 0 0 1-1.776-1.775v-.201h-.004a8.303 8.303 0 0 1 8.61-8.299M8.61 24.451c4.726.17 8.001 3.997 8.001 8.5 0 .984-.796 1.776-1.775 1.776H1.776A1.774 1.774 0 0 1 0 32.95v-.201a8.303 8.303 0 0 1 8.61-8.299M41.61 24.006c4.499.162 8.001 3.996 8.001 8.5 0 .984-.796 1.775-1.775 1.775H34.779a1.774 1.774 0 0 1-1.775-1.775v-.201H33a8.303 8.303 0 0 1 8.61-8.3M25.142 20a5.143 5.143 0 1 1 0 10.285 5.143 5.143 0 0 1 0-10.285M8.308 11.627a5.141 5.141 0 1 1 0 10.282 5.141 5.141 0 0 1 0-10.282M41.691 11.627a5.142 5.142 0 1 1 .001 10.284 5.142 5.142 0 0 1 0-10.284M24.997 5.557a5.143 5.143 0 1 1 0 10.285 5.143 5.143 0 0 1 0-10.285" })
|
|
9
|
+
] });
|
|
10
|
+
export {
|
|
11
|
+
SvgIconCommunities as default
|
|
12
|
+
};
|
|
@@ -66,7 +66,7 @@ const OnboardingModal = /* @__PURE__ */ forwardRef(({
|
|
|
66
66
|
isOnboarding ? handleCloseWithPreference() : handleCloseWithoutPreference();
|
|
67
67
|
}, children: t(closeText || "explorer.modal.onboarding.trash.close") })
|
|
68
68
|
] })
|
|
69
|
-
] }), document.getElementById("portal"));
|
|
69
|
+
] }), document.getElementById("portal") || document.body);
|
|
70
70
|
});
|
|
71
71
|
export {
|
|
72
72
|
OnboardingModal as default
|
|
@@ -7,13 +7,53 @@ export interface FormInputs {
|
|
|
7
7
|
enablePublic: boolean;
|
|
8
8
|
formSlug: string;
|
|
9
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Custom translations interface for overriding default translations
|
|
12
|
+
*/
|
|
13
|
+
export interface ResourceModalTranslations {
|
|
14
|
+
title?: string;
|
|
15
|
+
description?: string;
|
|
16
|
+
cancel?: string;
|
|
17
|
+
create?: string;
|
|
18
|
+
save?: string;
|
|
19
|
+
header?: {
|
|
20
|
+
create?: string;
|
|
21
|
+
edit?: string;
|
|
22
|
+
};
|
|
23
|
+
heading?: {
|
|
24
|
+
general?: string;
|
|
25
|
+
access?: string;
|
|
26
|
+
};
|
|
27
|
+
placeholder?: {
|
|
28
|
+
title?: string;
|
|
29
|
+
description?: string;
|
|
30
|
+
};
|
|
31
|
+
imagepicker?: {
|
|
32
|
+
add?: string;
|
|
33
|
+
delete?: string;
|
|
34
|
+
};
|
|
35
|
+
success?: {
|
|
36
|
+
created?: string;
|
|
37
|
+
updated?: string;
|
|
38
|
+
};
|
|
39
|
+
}
|
|
10
40
|
interface BaseProps {
|
|
41
|
+
/** Controls modal visibility */
|
|
11
42
|
isOpen: boolean;
|
|
43
|
+
/** Custom content to be displayed after the form fields */
|
|
12
44
|
children?: ReactNode | ((...props: any) => ReactNode);
|
|
45
|
+
/** Maximum length for the title input */
|
|
13
46
|
inputMaxLength?: number;
|
|
47
|
+
/** Maximum length for the description textarea */
|
|
14
48
|
textareaMaxLength?: number;
|
|
15
|
-
|
|
49
|
+
/** Callback when operation succeeds, with operation result as parameter */
|
|
50
|
+
onSuccess: (result: CreateResult | UpdateResult, param: CreateParameters | UpdateParameters) => void;
|
|
51
|
+
/** Callback when operation is cancelled */
|
|
16
52
|
onCancel: () => void;
|
|
53
|
+
/** Override application code (uses EdificeClient context by default) */
|
|
54
|
+
appCode?: string;
|
|
55
|
+
/** Custom translations for the modal */
|
|
56
|
+
translations?: ResourceModalTranslations;
|
|
17
57
|
}
|
|
18
58
|
interface CreateProps extends BaseProps {
|
|
19
59
|
mode: 'create';
|
|
@@ -26,5 +66,20 @@ interface UpdateProps extends BaseProps {
|
|
|
26
66
|
resourceId: ID;
|
|
27
67
|
}
|
|
28
68
|
type Props = CreateProps | UpdateProps;
|
|
29
|
-
|
|
69
|
+
/**
|
|
70
|
+
* ResourceModal component for creating or updating resources
|
|
71
|
+
*
|
|
72
|
+
* @component
|
|
73
|
+
* @example
|
|
74
|
+
* ```tsx
|
|
75
|
+
* <ResourceModal
|
|
76
|
+
* mode="create"
|
|
77
|
+
* isOpen={true}
|
|
78
|
+
* onCancel={() => setOpen(false)}
|
|
79
|
+
* onSuccess={(result) => console.log('Resource created:', result)}
|
|
80
|
+
* currentFolder={{ id: 'default' }}
|
|
81
|
+
* />
|
|
82
|
+
* ```
|
|
83
|
+
*/
|
|
84
|
+
export declare const ResourceModal: ({ isOpen, onCancel, onSuccess, children, appCode: customAppCode, translations: customT, inputMaxLength, textareaMaxLength, ...props }: Props) => import("react/jsx-runtime").JSX.Element;
|
|
30
85
|
export default ResourceModal;
|
|
@@ -25,14 +25,17 @@ const DEFAULT_INPUT_MAX_LENGTH = 60, DEFAULT_TEXTAREA_MAX_LENGTH = 400, Resource
|
|
|
25
25
|
onCancel,
|
|
26
26
|
onSuccess,
|
|
27
27
|
children,
|
|
28
|
+
appCode: customAppCode,
|
|
29
|
+
translations: customT = {},
|
|
28
30
|
inputMaxLength = DEFAULT_INPUT_MAX_LENGTH,
|
|
29
31
|
textareaMaxLength = DEFAULT_TEXTAREA_MAX_LENGTH,
|
|
30
32
|
...props
|
|
31
33
|
}) => {
|
|
34
|
+
var _a, _b, _c, _d, _e, _f;
|
|
32
35
|
const {
|
|
33
|
-
appCode:
|
|
36
|
+
appCode: contextAppCode,
|
|
34
37
|
currentApp
|
|
35
|
-
} = useEdificeClient(), {
|
|
38
|
+
} = useEdificeClient(), application = customAppCode || contextAppCode, {
|
|
36
39
|
t
|
|
37
40
|
} = useTranslation(), {
|
|
38
41
|
mode
|
|
@@ -65,7 +68,7 @@ const DEFAULT_INPUT_MAX_LENGTH = 60, DEFAULT_TEXTAREA_MAX_LENGTH = 400, Resource
|
|
|
65
68
|
isUpdating,
|
|
66
69
|
selectedResource: isUpdating ? resource : void 0
|
|
67
70
|
}), watchedDescription = watch("description"), onSubmit = async function(formData) {
|
|
68
|
-
var
|
|
71
|
+
var _a2, _b2;
|
|
69
72
|
try {
|
|
70
73
|
const data = {
|
|
71
74
|
description: formData.description || "",
|
|
@@ -74,21 +77,22 @@ const DEFAULT_INPUT_MAX_LENGTH = 60, DEFAULT_TEXTAREA_MAX_LENGTH = 400, Resource
|
|
|
74
77
|
slug: formData.enablePublic && formData.formSlug || "",
|
|
75
78
|
thumbnail
|
|
76
79
|
};
|
|
80
|
+
let result, param;
|
|
77
81
|
if (isCreating) {
|
|
78
82
|
const createParams = {
|
|
79
83
|
...data,
|
|
80
84
|
folder: props.currentFolder === void 0 || // Fix #WB2-1296: when searching, currentFolder is undefined
|
|
81
|
-
((
|
|
85
|
+
((_a2 = props.currentFolder) == null ? void 0 : _a2.id) === "default" ? void 0 : parseInt(((_b2 = props.currentFolder) == null ? void 0 : _b2.id) || ""),
|
|
82
86
|
application
|
|
83
87
|
};
|
|
84
|
-
props.createResource ? await props.createResource.mutateAsync(createParams) : await odeServices.resource(application).create(createParams);
|
|
88
|
+
param = createParams, props.createResource ? result = await props.createResource.mutateAsync(createParams) : result = await odeServices.resource(application).create(createParams);
|
|
85
89
|
} else {
|
|
86
90
|
const updateParams = {
|
|
87
91
|
...data,
|
|
88
92
|
entId: resource.assetId,
|
|
89
93
|
trashed: resource.trashed
|
|
90
94
|
};
|
|
91
|
-
props.updateResource ? await props.updateResource.mutateAsync(updateParams) : await odeServices.resource(application).update(updateParams);
|
|
95
|
+
param = updateParams, props.updateResource ? result = await props.updateResource.mutateAsync(updateParams) : result = await odeServices.resource(application).update(updateParams);
|
|
92
96
|
}
|
|
93
97
|
toast.success(/* @__PURE__ */ jsxs(Fragment, { children: [
|
|
94
98
|
/* @__PURE__ */ jsx("strong", { children: t(isCreating ? "explorer.resource.created" : "explorer.resource.updated") }),
|
|
@@ -106,21 +110,21 @@ const DEFAULT_INPUT_MAX_LENGTH = 60, DEFAULT_TEXTAREA_MAX_LENGTH = 400, Resource
|
|
|
106
110
|
"Public:",
|
|
107
111
|
formData.enablePublic ? t("explorer.enable.public.yes") : t("explorer.enable.public.no")
|
|
108
112
|
] })
|
|
109
|
-
] })), onSuccess();
|
|
113
|
+
] })), onSuccess(result, param);
|
|
110
114
|
} catch (e) {
|
|
111
115
|
console.error(e);
|
|
112
116
|
}
|
|
113
117
|
};
|
|
114
118
|
return isUpdating && !resource ? /* @__PURE__ */ jsx(LoadingScreen, {}) : /* @__PURE__ */ createPortal(/* @__PURE__ */ jsxs(Modal, { id: `${mode}-resource`, size: "lg", isOpen, onModalClose: onCancel, children: [
|
|
115
|
-
/* @__PURE__ */ jsx(Modal.Header, { onModalClose: onCancel, children: t(`explorer.resource.editModal.header.${isCreating ? "create" : "edit"}`) }),
|
|
119
|
+
/* @__PURE__ */ jsx(Modal.Header, { onModalClose: onCancel, children: ((_a = customT.header) == null ? void 0 : _a[isCreating ? "create" : "edit"]) ?? t(`explorer.resource.editModal.header.${isCreating ? "create" : "edit"}`) }),
|
|
116
120
|
/* @__PURE__ */ jsxs(Modal.Body, { children: [
|
|
117
|
-
/* @__PURE__ */ jsx(Heading, { headingStyle: "h4", level: "h3", className: "mb-16", children: t("explorer.resource.editModal.heading.general") }),
|
|
121
|
+
/* @__PURE__ */ jsx(Heading, { headingStyle: "h4", level: "h3", className: "mb-16", children: ((_b = customT.heading) == null ? void 0 : _b.general) ?? t("explorer.resource.editModal.heading.general") }),
|
|
118
122
|
/* @__PURE__ */ jsxs("form", { id: formId, onSubmit: handleSubmit(onSubmit), children: [
|
|
119
123
|
/* @__PURE__ */ jsxs("div", { className: "d-block d-md-flex gap-16 mb-24", children: [
|
|
120
|
-
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(ImagePicker, { app: currentApp, src: isUpdating && (resource == null ? void 0 : resource.thumbnail) || "", addButtonLabel: t("explorer.imagepicker.button.add"), deleteButtonLabel: t("explorer.imagepicker.button.delete"), onUploadImage: handleUploadImage, onDeleteImage: handleDeleteImage, className: "align-self-center mt-8", libraryMedia, mediaLibraryRef }) }),
|
|
124
|
+
/* @__PURE__ */ jsx("div", { children: /* @__PURE__ */ jsx(ImagePicker, { app: currentApp, src: isUpdating && (resource == null ? void 0 : resource.thumbnail) || "", addButtonLabel: ((_c = customT.imagepicker) == null ? void 0 : _c.add) ?? t("explorer.imagepicker.button.add"), deleteButtonLabel: ((_d = customT.imagepicker) == null ? void 0 : _d.delete) ?? t("explorer.imagepicker.button.delete"), onUploadImage: handleUploadImage, onDeleteImage: handleDeleteImage, className: "align-self-center mt-8", libraryMedia, mediaLibraryRef }) }),
|
|
121
125
|
/* @__PURE__ */ jsxs("div", { className: "col", children: [
|
|
122
126
|
/* @__PURE__ */ jsxs(FormControl, { id: "title", className: "mb-16", isRequired: !0, children: [
|
|
123
|
-
/* @__PURE__ */ jsx(Label, { children: t("title") }),
|
|
127
|
+
/* @__PURE__ */ jsx(Label, { children: customT.title ?? t("title") }),
|
|
124
128
|
/* @__PURE__ */ jsx(Input, { type: "text", defaultValue: isUpdating ? resource == null ? void 0 : resource.name : "", ...register("title", {
|
|
125
129
|
required: !0,
|
|
126
130
|
maxLength: inputMaxLength,
|
|
@@ -128,14 +132,14 @@ const DEFAULT_INPUT_MAX_LENGTH = 60, DEFAULT_TEXTAREA_MAX_LENGTH = 400, Resource
|
|
|
128
132
|
value: /[^ ]/,
|
|
129
133
|
message: "invalid title"
|
|
130
134
|
}
|
|
131
|
-
}), placeholder: t("explorer.resource.editModal.title.placeholder"), size: "md", "aria-required": !0, maxLength: inputMaxLength })
|
|
135
|
+
}), placeholder: ((_e = customT.placeholder) == null ? void 0 : _e.title) ?? t("explorer.resource.editModal.title.placeholder"), size: "md", "aria-required": !0, maxLength: inputMaxLength })
|
|
132
136
|
] }),
|
|
133
137
|
/* @__PURE__ */ jsxs(FormControl, { id: "description", isOptional: !0, children: [
|
|
134
|
-
/* @__PURE__ */ jsx(Label, { children: t("description") }),
|
|
138
|
+
/* @__PURE__ */ jsx(Label, { children: customT.description ?? t("description") }),
|
|
135
139
|
/* @__PURE__ */ jsx(TextArea, { defaultValue: (resource == null ? void 0 : resource.description) || "", ...register("description", {
|
|
136
140
|
required: !1,
|
|
137
141
|
maxLength: textareaMaxLength
|
|
138
|
-
}), placeholder: t("explorer.resource.editModal.description.placeholder"), size: "md", maxLength: textareaMaxLength }),
|
|
142
|
+
}), placeholder: ((_f = customT.placeholder) == null ? void 0 : _f.description) ?? t("explorer.resource.editModal.description.placeholder"), size: "md", maxLength: textareaMaxLength }),
|
|
139
143
|
watchedDescription && /* @__PURE__ */ jsx(TextareaCounter, { content: watchedDescription, maxLength: textareaMaxLength })
|
|
140
144
|
] })
|
|
141
145
|
] })
|
|
@@ -144,8 +148,8 @@ const DEFAULT_INPUT_MAX_LENGTH = 60, DEFAULT_TEXTAREA_MAX_LENGTH = 400, Resource
|
|
|
144
148
|
] })
|
|
145
149
|
] }),
|
|
146
150
|
/* @__PURE__ */ jsxs(Modal.Footer, { children: [
|
|
147
|
-
/* @__PURE__ */ jsx(Button, { color: "tertiary", onClick: onCancel, type: "button", variant: "ghost", children: t("explorer.cancel") }),
|
|
148
|
-
/* @__PURE__ */ jsx(Button, { form: formId, type: "submit", color: "primary", isLoading: isSubmitting, variant: "filled", disabled: !isValid || isSubmitting, children:
|
|
151
|
+
/* @__PURE__ */ jsx(Button, { color: "tertiary", onClick: onCancel, type: "button", variant: "ghost", children: customT.cancel ?? t("explorer.cancel") }),
|
|
152
|
+
/* @__PURE__ */ jsx(Button, { form: formId, type: "submit", color: "primary", isLoading: isSubmitting, variant: "filled", disabled: !isValid || isSubmitting, children: isCreating ? customT.create ?? t("explorer.create") : customT.save ?? t("save") })
|
|
149
153
|
] }),
|
|
150
154
|
/* @__PURE__ */ jsx(MediaLibrary, { appCode: application, ref: mediaLibraryRef, multiple: !1, visibility: "protected", ...mediaLibraryHandlers })
|
|
151
155
|
] }), document.getElementById("portal"));
|
|
@@ -6,4 +6,4 @@ export declare const ShareBookmarkLine: ({ shareRights, showBookmark, toggleBook
|
|
|
6
6
|
toggleRight: (shareRight: ShareRight, actionName: ShareRightActionDisplayName) => void;
|
|
7
7
|
toggleBookmark: () => void;
|
|
8
8
|
onDeleteRow: (shareRight: ShareRight) => void;
|
|
9
|
-
}) => (false | import("react/jsx-runtime").JSX.Element)[];
|
|
9
|
+
}) => (false | import("react/jsx-runtime").JSX.Element | null)[];
|
|
@@ -6,6 +6,8 @@ import SvgIconRafterDown from "../../icons/components/IconRafterDown.js";
|
|
|
6
6
|
import SvgIconUsers from "../../icons/components/IconUsers.js";
|
|
7
7
|
import { hasRight } from "./utils/hasRight.js";
|
|
8
8
|
import { showShareRightLine } from "./utils/showShareRightLine.js";
|
|
9
|
+
import { useShareRightDisabled } from "./hooks/useShareRightDisabled.js";
|
|
10
|
+
import { useShareRightVisible } from "./hooks/useShareRightVisible.js";
|
|
9
11
|
import Avatar from "../../../components/Avatar/Avatar.js";
|
|
10
12
|
import Button from "../../../components/Button/Button.js";
|
|
11
13
|
import Checkbox from "../../../components/Checkbox/Checkbox.js";
|
|
@@ -20,14 +22,18 @@ const ShareBookmarkLine = ({
|
|
|
20
22
|
}) => {
|
|
21
23
|
const {
|
|
22
24
|
t
|
|
23
|
-
} = useTranslation()
|
|
25
|
+
} = useTranslation(), {
|
|
26
|
+
isShareRightDisabled
|
|
27
|
+
} = useShareRightDisabled(), {
|
|
28
|
+
isShareRightVisible
|
|
29
|
+
} = useShareRightVisible();
|
|
24
30
|
return shareRights == null ? void 0 : shareRights.rights.map((shareRight) => {
|
|
25
31
|
const selectedAvatar = {
|
|
26
32
|
user: /* @__PURE__ */ jsx(Avatar, { alt: t("explorer.modal.share.avatar.shared.alt"), size: "xs", src: shareRight.avatarUrl, variant: "circle" }),
|
|
27
33
|
group: /* @__PURE__ */ jsx("div", { className: "avatar-xs bg-primary-200 justify-content-center d-flex rounded-circle", children: /* @__PURE__ */ jsx(SvgIconUsers, { width: 16 }) }),
|
|
28
34
|
sharebookmark: /* @__PURE__ */ jsx(SvgIconBookmark, {})
|
|
29
|
-
}[shareRight.type] || null, isTypeBookmark = shareRight.type === "sharebookmark", isTypeUser = shareRight.type === "user";
|
|
30
|
-
return showShareRightLine(shareRight, showBookmark) && /* @__PURE__ */ jsxs("tr", { className: shareRight.isBookmarkMember ? "bg-light" : "", children: [
|
|
35
|
+
}[shareRight.type] || null, isTypeBookmark = shareRight.type === "sharebookmark", isTypeUser = shareRight.type === "user", isDisabled = isShareRightDisabled(shareRight, shareRights);
|
|
36
|
+
return isShareRightVisible(shareRight, shareRights) ? showShareRightLine(shareRight, showBookmark) && /* @__PURE__ */ jsxs("tr", { className: shareRight.isBookmarkMember ? "bg-light" : "", children: [
|
|
31
37
|
/* @__PURE__ */ jsx("td", { children: selectedAvatar }),
|
|
32
38
|
/* @__PURE__ */ jsx("td", { children: /* @__PURE__ */ jsxs("div", { className: "d-flex", children: [
|
|
33
39
|
isTypeBookmark && /* @__PURE__ */ jsx(Button, { color: "tertiary", rightIcon: /* @__PURE__ */ jsx(SvgIconRafterDown, { title: t("show"), className: "w-16 min-w-0", style: {
|
|
@@ -39,9 +45,9 @@ const ShareBookmarkLine = ({
|
|
|
39
45
|
] }) }),
|
|
40
46
|
shareRightActions.map((shareRightAction) => /* @__PURE__ */ jsx("td", { style: {
|
|
41
47
|
width: "80px"
|
|
42
|
-
}, className: "text-center text-white", children: /* @__PURE__ */ jsx(Checkbox, { checked: hasRight(shareRight, shareRightAction), onChange: () => toggleRight(shareRight, shareRightAction.id) }) }, shareRightAction.displayName)),
|
|
43
|
-
/* @__PURE__ */ jsx("td", { children: !shareRight.isBookmarkMember && /* @__PURE__ */ jsx(IconButton, { "aria-label": t("close"), color: "tertiary", icon: /* @__PURE__ */ jsx(SvgIconClose, {}), type: "button", variant: "ghost", title: t("close"), onClick: () => onDeleteRow(shareRight) }) })
|
|
44
|
-
] }, shareRight.id);
|
|
48
|
+
}, className: "text-center text-white", children: /* @__PURE__ */ jsx(Checkbox, { checked: hasRight(shareRight, shareRightAction), onChange: () => toggleRight(shareRight, shareRightAction.id), disabled: isDisabled }) }, shareRightAction.displayName)),
|
|
49
|
+
/* @__PURE__ */ jsx("td", { children: !shareRight.isBookmarkMember && !isDisabled && /* @__PURE__ */ jsx(IconButton, { "aria-label": t("close"), color: "tertiary", icon: /* @__PURE__ */ jsx(SvgIconClose, {}), type: "button", variant: "ghost", title: t("close"), onClick: () => onDeleteRow(shareRight) }) })
|
|
50
|
+
] }, shareRight.id) : null;
|
|
45
51
|
});
|
|
46
52
|
};
|
|
47
53
|
export {
|
|
@@ -11,6 +11,7 @@ import { useSearch } from "./hooks/useSearch.js";
|
|
|
11
11
|
import useShare from "./hooks/useShare.js";
|
|
12
12
|
import { useShareBookmark } from "./hooks/useShareBookmark.js";
|
|
13
13
|
import Modal from "../../../components/Modal/Modal.js";
|
|
14
|
+
import Alert from "../../../components/Alert/Alert.js";
|
|
14
15
|
import Heading from "../../../components/Heading/Heading.js";
|
|
15
16
|
import LoadingScreen from "../../../components/LoadingScreen/LoadingScreen.js";
|
|
16
17
|
import VisuallyHidden from "../../../components/VisuallyHidden/VisuallyHidden.js";
|
|
@@ -84,6 +85,7 @@ function ShareResourceModal({
|
|
|
84
85
|
return /* @__PURE__ */ createPortal(/* @__PURE__ */ jsxs(Modal, { id: "share_modal", size: "lg", isOpen, onModalClose: onCancel, children: [
|
|
85
86
|
/* @__PURE__ */ jsx(Modal.Header, { onModalClose: onCancel, children: t("share.title") }),
|
|
86
87
|
/* @__PURE__ */ jsxs(Modal.Body, { children: [
|
|
88
|
+
/* @__PURE__ */ jsx(Alert, { type: "info", className: "mb-16", children: t("explorer.modal.share.alert.community") }),
|
|
87
89
|
/* @__PURE__ */ jsx(Heading, { headingStyle: "h4", level: "h3", className: "mb-16", children: t("explorer.modal.share.usersWithAccess") }),
|
|
88
90
|
/* @__PURE__ */ jsx("div", { className: "table-responsive", children: isLoading ? /* @__PURE__ */ jsx(LoadingScreen, {}) : /* @__PURE__ */ jsxs("table", { className: "table border align-middle mb-0", children: [
|
|
89
91
|
/* @__PURE__ */ jsx("thead", { className: "bg-secondary", children: /* @__PURE__ */ jsxs("tr", { children: [
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ShareRight, ShareRightWithVisibles } from '@edifice.io/client';
|
|
2
|
+
/**
|
|
3
|
+
* Hook to determine if a share right should be disabled
|
|
4
|
+
* @returns function to check if a specific share right should be disabled
|
|
5
|
+
*/
|
|
6
|
+
export declare const useShareRightDisabled: () => {
|
|
7
|
+
isShareRightDisabled: (shareRight: ShareRight, shareRights: ShareRightWithVisibles) => boolean;
|
|
8
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const DISABLED_GROUP_LABELS = ["CommunityMemberGroup", "CommunityAdminGroup"], useShareRightDisabled = () => ({
|
|
2
|
+
isShareRightDisabled: (shareRight, shareRights) => {
|
|
3
|
+
if (shareRight.type !== "group")
|
|
4
|
+
return !1;
|
|
5
|
+
const group = shareRights.visibleGroups.find((g) => g.id === shareRight.id);
|
|
6
|
+
return !group || !group.labels || !Array.isArray(group.labels) ? !1 : !!group.labels.some((label) => DISABLED_GROUP_LABELS.includes(label));
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export {
|
|
10
|
+
useShareRightDisabled
|
|
11
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { ShareRight, ShareRightWithVisibles } from '@edifice.io/client';
|
|
2
|
+
/**
|
|
3
|
+
* Hook to determine if a share right (group) should be visible in the share UI.
|
|
4
|
+
* Groups containing any label from `HIDDEN_GROUP_LABELS` will be hidden.
|
|
5
|
+
*
|
|
6
|
+
* Returns a function `isShareRightVisible(shareRight, shareRights)` that returns
|
|
7
|
+
* true when the share right must be displayed and false when it must be hidden.
|
|
8
|
+
*/
|
|
9
|
+
export declare const useShareRightVisible: () => {
|
|
10
|
+
isShareRightVisible: (shareRight: ShareRight, shareRights: ShareRightWithVisibles) => boolean;
|
|
11
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
const HIDDEN_GROUP_LABELS = ["CommunityAdminGroup"], useShareRightVisible = () => ({
|
|
2
|
+
isShareRightVisible: (shareRight, shareRights) => {
|
|
3
|
+
if (shareRight.type !== "group")
|
|
4
|
+
return !0;
|
|
5
|
+
const group = shareRights.visibleGroups.find((g) => g.id === shareRight.id);
|
|
6
|
+
return !group || !group.labels || !Array.isArray(group.labels) ? !0 : !group.labels.some((label) => HIDDEN_GROUP_LABELS.includes(label));
|
|
7
|
+
}
|
|
8
|
+
});
|
|
9
|
+
export {
|
|
10
|
+
useShareRightVisible
|
|
11
|
+
};
|
|
@@ -1,13 +1,24 @@
|
|
|
1
|
+
import { ReactNode } from 'react';
|
|
1
2
|
import { WorkspaceElement } from '@edifice.io/client';
|
|
2
3
|
import { CardProps } from '../../../components';
|
|
3
4
|
export interface FileCardProps extends CardProps {
|
|
4
5
|
/**
|
|
5
6
|
* WorkspaceElement
|
|
6
|
-
|
|
7
|
+
*/
|
|
7
8
|
doc: WorkspaceElement;
|
|
9
|
+
/**
|
|
10
|
+
* Custom icon to override the default based on file type
|
|
11
|
+
* Can be a string or a React node
|
|
12
|
+
*/
|
|
13
|
+
customIcon?: ReactNode;
|
|
14
|
+
/**
|
|
15
|
+
* Custom color class to override the default based on file type
|
|
16
|
+
* Example: "bg-purple-300" or any valid CSS class
|
|
17
|
+
*/
|
|
18
|
+
customColor?: string;
|
|
8
19
|
}
|
|
9
20
|
declare const FileCard: {
|
|
10
|
-
({ doc, isClickable, isSelectable, isSelected, onClick, className, }: FileCardProps): import("react/jsx-runtime").JSX.Element;
|
|
21
|
+
({ doc, isClickable, isSelectable, isSelected, onClick, className, onSelect, isFocused, app, customIcon, customColor, }: FileCardProps): import("react/jsx-runtime").JSX.Element;
|
|
11
22
|
displayName: string;
|
|
12
23
|
};
|
|
13
24
|
export default FileCard;
|
|
@@ -15,11 +15,21 @@ const FileCard = ({
|
|
|
15
15
|
isSelectable = !1,
|
|
16
16
|
isSelected = !1,
|
|
17
17
|
onClick,
|
|
18
|
-
className
|
|
18
|
+
className,
|
|
19
|
+
onSelect,
|
|
20
|
+
isFocused,
|
|
21
|
+
app,
|
|
22
|
+
customIcon,
|
|
23
|
+
customColor
|
|
19
24
|
}) => {
|
|
20
|
-
var _a;
|
|
21
25
|
const ref = useRef(null), type = DocumentHelper.getRole(doc);
|
|
22
26
|
function getRoleMap(type2) {
|
|
27
|
+
if (customIcon !== void 0 || customColor !== void 0)
|
|
28
|
+
return {
|
|
29
|
+
icon: customIcon || /* @__PURE__ */ jsx(SvgIconTextPage, { width: 22, height: 22 }),
|
|
30
|
+
color: customColor || "bg-gray-300",
|
|
31
|
+
hasShadow: !1
|
|
32
|
+
};
|
|
23
33
|
const roleMappings = {
|
|
24
34
|
csv: {
|
|
25
35
|
icon: ".CSV",
|
|
@@ -72,17 +82,17 @@ const FileCard = ({
|
|
|
72
82
|
};
|
|
73
83
|
return roleMappings[type2] || roleMappings.unknown;
|
|
74
84
|
}
|
|
75
|
-
const file = clsx("file position-relative rounded", (
|
|
85
|
+
const roleMap = getRoleMap(type ?? "unknown"), file = clsx("file position-relative rounded", (roleMap == null ? void 0 : roleMap.color) ?? "bg-yellow-200"), mediaSrc = type === "img" || type === "video" ? odeServices.workspace().getThumbnailUrl(doc) : null, hasThumbnail = useThumbnail(mediaSrc, {
|
|
76
86
|
ref
|
|
77
87
|
}), imageStyles = hasThumbnail && {
|
|
78
88
|
backgroundImage: `url(${mediaSrc})`,
|
|
79
89
|
backgroundSize: "cover"
|
|
80
90
|
};
|
|
81
|
-
return /* @__PURE__ */ jsx(Card, { className: clsx("card-file", className), isClickable, isSelectable, isSelected, onClick, children: /* @__PURE__ */ jsxs(Card.Body, { space: "8", children: [
|
|
91
|
+
return /* @__PURE__ */ jsx(Card, { className: clsx("card-file", className), isClickable, isSelectable, isSelected, onClick, app, isFocused, onSelect, children: /* @__PURE__ */ jsxs(Card.Body, { space: "8", children: [
|
|
82
92
|
/* @__PURE__ */ jsx("div", { ref, className: file, style: {
|
|
83
93
|
aspectRatio: "16/10",
|
|
84
94
|
...imageStyles
|
|
85
|
-
}, children: type !== "img" || type === "img" && !hasThumbnail ? /* @__PURE__ */ jsx(FileIcon, { type, roleMap
|
|
95
|
+
}, children: type !== "img" || type === "img" && !hasThumbnail ? /* @__PURE__ */ jsx(FileIcon, { type, roleMap }) : null }),
|
|
86
96
|
/* @__PURE__ */ jsxs("div", { className: "mt-4", children: [
|
|
87
97
|
/* @__PURE__ */ jsx(Card.Text, { children: doc.name }),
|
|
88
98
|
/* @__PURE__ */ jsx(Card.Text, { className: "text-black-50", children: doc == null ? void 0 : doc.ownerName })
|
|
@@ -1,6 +1,10 @@
|
|
|
1
1
|
import { Role } from '@edifice.io/client';
|
|
2
2
|
declare const FileIcon: ({ type, roleMap, }: {
|
|
3
3
|
type: Role | "unknown";
|
|
4
|
-
roleMap?:
|
|
4
|
+
roleMap?: {
|
|
5
|
+
icon: React.ReactNode | string;
|
|
6
|
+
color: string;
|
|
7
|
+
hasShadow?: boolean;
|
|
8
|
+
};
|
|
5
9
|
}) => import("react/jsx-runtime").JSX.Element;
|
|
6
10
|
export default FileIcon;
|
|
@@ -5,8 +5,8 @@ const FileIcon = ({
|
|
|
5
5
|
type,
|
|
6
6
|
roleMap
|
|
7
7
|
}) => {
|
|
8
|
-
const
|
|
9
|
-
"p-12 rounded-circle shadow":
|
|
8
|
+
const hasShadow = typeof (roleMap == null ? void 0 : roleMap.icon) != "string" && type !== "unknown" && (roleMap == null ? void 0 : roleMap.hasShadow) !== !1, fileicon = clsx("position-absolute top-50 start-50 translate-middle", {
|
|
9
|
+
"p-12 rounded-circle shadow": hasShadow
|
|
10
10
|
}, roleMap == null ? void 0 : roleMap.color);
|
|
11
11
|
return /* @__PURE__ */ jsx("div", { className: fileicon, children: (roleMap == null ? void 0 : roleMap.icon) ?? /* @__PURE__ */ jsx(SvgIconPaperclip, {}) });
|
|
12
12
|
};
|
|
@@ -32,6 +32,8 @@ export interface InternalLinkerProps {
|
|
|
32
32
|
applicationList?: ApplicationOption[];
|
|
33
33
|
/** Whether to show the application selector */
|
|
34
34
|
showApplicationSelector?: boolean;
|
|
35
|
+
/** Optional callback to filter resources after loading. Applied in addition to search filters. */
|
|
36
|
+
resourceFilter?: (resource: ILinkedResource) => boolean;
|
|
35
37
|
}
|
|
36
|
-
export declare const InternalLinker: ({ appCode, defaultAppCode, defaultResourceId, onChange, onSelect, multiple, resourceList, applicationList, showApplicationSelector, }: InternalLinkerProps) => import("react/jsx-runtime").JSX.Element;
|
|
38
|
+
export declare const InternalLinker: ({ appCode, defaultAppCode, defaultResourceId, onChange, onSelect, multiple, resourceList, applicationList, showApplicationSelector, resourceFilter, }: InternalLinkerProps) => import("react/jsx-runtime").JSX.Element;
|
|
37
39
|
export default InternalLinker;
|
|
@@ -21,7 +21,8 @@ const InternalLinker = ({
|
|
|
21
21
|
multiple = !0,
|
|
22
22
|
resourceList,
|
|
23
23
|
applicationList,
|
|
24
|
-
showApplicationSelector = !0
|
|
24
|
+
showApplicationSelector = !0,
|
|
25
|
+
resourceFilter
|
|
25
26
|
}) => {
|
|
26
27
|
const {
|
|
27
28
|
t
|
|
@@ -38,12 +39,12 @@ const InternalLinker = ({
|
|
|
38
39
|
}, []), sortResources = useCallback((resources2) => resources2.sort((a, b) => a.modifiedAt < b.modifiedAt ? 1 : -1), []), loadAndDisplayResources = useCallback((search) => {
|
|
39
40
|
async function load() {
|
|
40
41
|
if (resourceList) {
|
|
41
|
-
|
|
42
|
-
setResources(sortResources(filteredResources));
|
|
42
|
+
let filteredResources = resourceList.filter((resource) => filterResources(resource, search));
|
|
43
|
+
resourceFilter && (filteredResources = filteredResources.filter(resourceFilter)), setResources(sortResources(filteredResources));
|
|
43
44
|
return;
|
|
44
45
|
} else if (selectedApplication)
|
|
45
46
|
try {
|
|
46
|
-
|
|
47
|
+
let resources2 = (await loadResources({
|
|
47
48
|
application: selectedApplication.application,
|
|
48
49
|
search,
|
|
49
50
|
types: [selectedApplication.application],
|
|
@@ -54,14 +55,14 @@ const InternalLinker = ({
|
|
|
54
55
|
}
|
|
55
56
|
// ignored at the moment
|
|
56
57
|
})).filter((resource) => filterResources(resource, search));
|
|
57
|
-
setResources(sortResources(resources2));
|
|
58
|
+
resourceFilter && (resources2 = resources2.filter(resourceFilter)), setResources(sortResources(resources2));
|
|
58
59
|
return;
|
|
59
60
|
} catch {
|
|
60
61
|
}
|
|
61
62
|
setResources([]);
|
|
62
63
|
}
|
|
63
64
|
load();
|
|
64
|
-
}, [loadResources, selectedApplication, filterResources, sortResources, resourceList]), [selectedDocuments, setSelectedDocuments] = useState([]), handleOptionClick = (option) => {
|
|
65
|
+
}, [loadResources, selectedApplication, filterResources, sortResources, resourceList, resourceFilter]), [selectedDocuments, setSelectedDocuments] = useState([]), handleOptionClick = (option) => {
|
|
65
66
|
onChange == null || onChange(option), setSelectedApplication(option);
|
|
66
67
|
}, handleSearchChange = (event) => {
|
|
67
68
|
const newText = event.target.value;
|
|
@@ -35,7 +35,9 @@ export type MediaLibraryType =
|
|
|
35
35
|
/** Embedded websites */
|
|
36
36
|
| 'embedder'
|
|
37
37
|
/** Hyperlinks */
|
|
38
|
-
| 'hyperlink'
|
|
38
|
+
| 'hyperlink'
|
|
39
|
+
/** Studio mode for recording audio and video */
|
|
40
|
+
| 'studio';
|
|
39
41
|
export interface MediaLibraryRef {
|
|
40
42
|
/** Open the Media Library on given type. */
|
|
41
43
|
show: (type: MediaLibraryType) => void;
|
|
@@ -56,6 +56,11 @@ const orderedTabs = [
|
|
|
56
56
|
embedder: {
|
|
57
57
|
title: "bbm.embed.modal.title",
|
|
58
58
|
defaultTab: "iframe"
|
|
59
|
+
},
|
|
60
|
+
// Add studio type with video-capture as default tab
|
|
61
|
+
studio: {
|
|
62
|
+
title: "bbm.studio.modal.title",
|
|
63
|
+
defaultTab: "audio-capture"
|
|
59
64
|
}
|
|
60
65
|
}, MediaLibrary = /* @__PURE__ */ forwardRef(({
|
|
61
66
|
appCode,
|
|
@@ -101,7 +106,7 @@ const orderedTabs = [
|
|
|
101
106
|
icon: /* @__PURE__ */ jsx(SvgIconRecordVideo, {}),
|
|
102
107
|
label: t("bbm.video"),
|
|
103
108
|
content: /* @__PURE__ */ jsx(InnerTabs.Video, {}),
|
|
104
|
-
availableFor: ["video"],
|
|
109
|
+
availableFor: ["video", "studio"],
|
|
105
110
|
isEnable: () => !!videoCaptureWorkflow
|
|
106
111
|
},
|
|
107
112
|
"audio-capture": {
|
|
@@ -109,7 +114,7 @@ const orderedTabs = [
|
|
|
109
114
|
icon: /* @__PURE__ */ jsx(SvgIconMic, {}),
|
|
110
115
|
label: t("bbm.audio"),
|
|
111
116
|
content: /* @__PURE__ */ jsx(InnerTabs.Audio, {}),
|
|
112
|
-
availableFor: ["audio"],
|
|
117
|
+
availableFor: ["audio", "studio"],
|
|
113
118
|
isEnable: () => !!workspaceCreateWorkflow
|
|
114
119
|
},
|
|
115
120
|
"external-link": {
|
package/dist/multimedia.js
CHANGED
|
@@ -2,23 +2,25 @@ import { default as default2 } from "./modules/multimedia/AudioRecorder/AudioRec
|
|
|
2
2
|
import { default as default3 } from "./modules/multimedia/Embed/Embed.js";
|
|
3
3
|
import { default as default4 } from "./modules/multimedia/ImageEditor/components/ImageEditor.js";
|
|
4
4
|
import { default as default5 } from "./modules/multimedia/ImagePicker/ImagePicker.js";
|
|
5
|
-
import { default as default6 } from "./modules/multimedia/
|
|
6
|
-
import { default as default7 } from "./modules/multimedia/
|
|
7
|
-
import { default as default8 } from "./modules/multimedia/
|
|
8
|
-
import { default as default9 } from "./modules/multimedia/
|
|
9
|
-
import { default as default10 } from "./modules/multimedia/
|
|
5
|
+
import { default as default6 } from "./modules/multimedia/FileCard/FileCard.js";
|
|
6
|
+
import { default as default7 } from "./modules/multimedia/MediaLibrary/MediaLibrary.js";
|
|
7
|
+
import { default as default8 } from "./modules/multimedia/VideoEmbed/VideoEmbed.js";
|
|
8
|
+
import { default as default9 } from "./modules/multimedia/VideoRecorder/VideoRecorder.js";
|
|
9
|
+
import { default as default10 } from "./modules/multimedia/Workspace/Workspace.js";
|
|
10
|
+
import { default as default11 } from "./modules/multimedia/WorkspaceFolders/WorkspaceFolders.js";
|
|
10
11
|
import { ExternalLinker } from "./modules/multimedia/Linker/ExternalLinker/ExternalLinker.js";
|
|
11
12
|
import { InternalLinker } from "./modules/multimedia/Linker/InternalLinker/InternalLinker.js";
|
|
12
13
|
export {
|
|
13
14
|
default2 as AudioRecorder,
|
|
14
15
|
default3 as Embed,
|
|
15
16
|
ExternalLinker,
|
|
17
|
+
default6 as FileCard,
|
|
16
18
|
default4 as ImageEditor,
|
|
17
19
|
default5 as ImagePicker,
|
|
18
20
|
InternalLinker,
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
default7 as MediaLibrary,
|
|
22
|
+
default8 as VideoEmbed,
|
|
23
|
+
default9 as VideoRecorder,
|
|
24
|
+
default10 as Workspace,
|
|
25
|
+
default11 as WorkspaceFolders
|
|
24
26
|
};
|