@edifice.io/react 2.6.9-develop-integration.20261015175127 → 2.6.9-develop-b2school.20261016112251
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/Layout/Layout.js +12 -4
- package/dist/components/Layout/components/Header.js +4 -4
- package/dist/components/Layout/components/NavLink.d.ts +3 -3
- package/dist/components/Layout/components/NavLink.js +5 -3
- package/dist/components/Tree/utilities/tree.js +1 -21
- package/dist/homepage.js +54 -24
- package/dist/hooks/index.d.ts +0 -3
- package/dist/hooks/useBackground/useBackground.d.ts +1 -1
- package/dist/hooks/useZendeskGuide/useZendeskGuide.d.ts +2 -6
- package/dist/hooks/useZendeskGuide/useZendeskGuide.js +11 -8
- package/dist/icons.js +404 -402
- package/dist/index.js +184 -198
- package/dist/modules/HelpZone/HelpZone.js +6 -8
- package/dist/modules/HelpZone/HelpZoneContainer.js +2 -5
- package/dist/modules/homepage/components/Agenda/Agenda.d.ts +10 -0
- package/dist/modules/homepage/components/Agenda/Agenda.js +54 -0
- package/dist/modules/homepage/components/Agenda/AgendaContainer.d.ts +1 -0
- package/dist/modules/homepage/components/Agenda/AgendaContainer.js +14 -0
- package/dist/modules/homepage/components/Agenda/AgendaEventCard.d.ts +10 -0
- package/dist/modules/homepage/components/Agenda/AgendaEventCard.js +30 -0
- package/dist/modules/homepage/components/Agenda/hooks/useAgendaContainer.d.ts +14 -0
- package/dist/modules/homepage/components/Agenda/hooks/useAgendaContainer.js +27 -0
- package/dist/modules/homepage/components/Agenda/index.d.ts +3 -0
- package/dist/modules/homepage/components/Agenda/services/api/agendaService.d.ts +24 -0
- package/dist/modules/homepage/components/Agenda/services/api/agendaService.js +45 -0
- package/dist/modules/homepage/components/Agenda/services/api/index.d.ts +4 -0
- package/dist/modules/homepage/components/Agenda/services/api/index.js +5 -0
- package/dist/modules/homepage/components/Agenda/services/queries/agenda.d.ts +19 -0
- package/dist/modules/homepage/components/Agenda/services/queries/agenda.js +26 -0
- package/dist/modules/homepage/components/BriefMe/BriefMe.d.ts +9 -0
- package/dist/modules/homepage/components/BriefMe/BriefMe.js +59 -0
- package/dist/modules/homepage/components/BriefMe/BriefMeContainer.d.ts +4 -0
- package/dist/modules/homepage/components/BriefMe/BriefMeContainer.js +17 -0
- package/dist/modules/homepage/components/BriefMe/index.d.ts +4 -0
- package/dist/modules/homepage/components/BriefMe/types.d.ts +17 -0
- package/dist/modules/homepage/components/BriefMe/types.js +8 -0
- package/dist/modules/homepage/components/BriefMe/useBriefMe.d.ts +31 -0
- package/dist/modules/homepage/components/BriefMe/useBriefMe.js +51 -0
- package/dist/modules/homepage/components/Communities/Communities.js +4 -4
- package/dist/modules/homepage/components/GenerationHdf/GenerationHdf.d.ts +16 -0
- package/dist/modules/homepage/components/GenerationHdf/GenerationHdf.js +48 -0
- package/dist/modules/homepage/components/GenerationHdf/GenerationHdfContainer.d.ts +4 -0
- package/dist/modules/homepage/components/GenerationHdf/GenerationHdfContainer.js +12 -0
- package/dist/modules/homepage/components/GenerationHdf/formatSolde.d.ts +1 -0
- package/dist/modules/homepage/components/GenerationHdf/formatSolde.js +6 -0
- package/dist/modules/homepage/components/GenerationHdf/index.d.ts +3 -0
- package/dist/modules/homepage/components/GenerationHdf/useGenerationHdf.d.ts +10 -0
- package/dist/modules/homepage/components/GenerationHdf/useGenerationHdf.js +68 -0
- package/dist/modules/homepage/components/Header/Header.js +30 -21
- package/dist/modules/homepage/components/Header/MyAppsPopover.d.ts +5 -0
- package/dist/modules/homepage/components/Header/MyAppsPopover.js +28 -0
- package/dist/modules/homepage/components/Header/useSafeHoverPopover.js +32 -0
- package/dist/modules/homepage/components/HomeCard/HomeCardHeader.d.ts +5 -1
- package/dist/modules/homepage/components/HomeCard/HomeCardHeader.js +1 -1
- package/dist/modules/homepage/components/MessageFlashList/MessageFlash.js +1 -1
- package/dist/modules/homepage/components/Notifications/NotificationList.js +5 -5
- package/dist/modules/homepage/components/Notifications/NotificationSkeleton.js +2 -2
- package/dist/modules/homepage/components/Notifications/components/NotificationFilterMenu.js +1 -5
- package/dist/modules/homepage/components/Notifications/components/NotificationFilterModal.js +10 -12
- package/dist/modules/homepage/components/Notifications/components/NotificationOptionsMenu.js +3 -9
- package/dist/modules/homepage/components/Notifications/components/ReportNotificationModal.js +6 -12
- package/dist/modules/homepage/components/Notifications/components/notificationAdapter.js +12 -10
- package/dist/modules/homepage/components/Notifications/hooks/useNotificationList.js +9 -10
- package/dist/modules/homepage/components/Qwant/Qwant.d.ts +4 -0
- package/dist/modules/homepage/components/Qwant/Qwant.js +41 -0
- package/dist/modules/homepage/components/Qwant/QwantContainer.d.ts +1 -0
- package/dist/modules/homepage/components/Qwant/QwantContainer.js +10 -0
- package/dist/modules/homepage/components/Qwant/index.d.ts +3 -0
- package/dist/modules/homepage/components/SchoolSpace/SchoolSpaceContainer.js +1 -1
- package/dist/modules/homepage/components/Universalis/Universalis.d.ts +8 -0
- package/dist/modules/homepage/components/Universalis/Universalis.js +62 -0
- package/dist/modules/homepage/components/Universalis/UniversalisContainer.d.ts +1 -0
- package/dist/modules/homepage/components/Universalis/UniversalisContainer.js +16 -0
- package/dist/modules/homepage/components/Universalis/index.d.ts +3 -0
- package/dist/modules/homepage/components/UserSpace/UserSpace.d.ts +3 -1
- package/dist/modules/homepage/components/UserSpace/UserSpace.js +13 -7
- package/dist/modules/homepage/components/UserSpace/UserSpaceContainer.d.ts +4 -2
- package/dist/modules/homepage/components/UserSpace/UserSpaceContainer.js +3 -2
- package/dist/modules/homepage/components/WidgetsPersonalizationPanel/WidgetToggle.d.ts +16 -0
- package/dist/modules/homepage/components/WidgetsPersonalizationPanel/WidgetToggle.js +15 -0
- package/dist/modules/homepage/components/WidgetsPersonalizationPanel/WidgetsPersonalizationPanel.d.ts +21 -0
- package/dist/modules/homepage/components/WidgetsPersonalizationPanel/WidgetsPersonalizationPanel.js +47 -0
- package/dist/modules/homepage/components/WidgetsPersonalizationPanel/index.d.ts +2 -0
- package/dist/modules/homepage/components/index.d.ts +7 -1
- package/dist/modules/homepage/{components/SchoolSpace → hooks}/useUserSchools.d.ts +2 -2
- package/dist/modules/homepage/{components/SchoolSpace → hooks}/useUserSchools.js +4 -4
- package/dist/modules/icons/components/IconAddWidget.d.ts +7 -0
- package/dist/modules/icons/components/IconAddWidget.js +12 -0
- package/dist/modules/icons/components/index.d.ts +1 -0
- package/dist/modules/multimedia/FileCard/index.d.ts +0 -4
- package/dist/modules/multimedia/Linker/InternalLinker/InternalLinker.d.ts +1 -7
- package/dist/modules/multimedia/Linker/InternalLinker/InternalLinker.js +0 -2
- package/dist/modules/multimedia/MediaLibrary/MediaLibrary.d.ts +2 -2
- package/dist/modules/multimedia/MediaLibrary/MediaLibrary.js +12 -48
- package/dist/modules/multimedia/MediaLibrary/innertabs/index.d.ts +0 -2
- package/dist/modules/multimedia/MediaLibrary/innertabs/index.js +0 -4
- package/dist/modules/multimedia/Workspace/Workspace.js +5 -8
- package/dist/modules/multimedia/index.d.ts +0 -2
- package/dist/multimedia.js +18 -26
- package/package.json +6 -6
- package/dist/hooks/useCarbonioUnread/index.d.ts +0 -1
- package/dist/hooks/useCarbonioUnread/useCarbonioUnread.d.ts +0 -5
- package/dist/hooks/useCarbonioUnread/useCarbonioUnread.js +0 -24
- package/dist/hooks/useGoogleDriveSearch/index.d.ts +0 -1
- package/dist/hooks/useGoogleDriveSearch/useGoogleDriveSearch.d.ts +0 -19
- package/dist/hooks/useGoogleDriveSearch/useGoogleDriveSearch.js +0 -60
- package/dist/hooks/useNextcloudSearch/index.d.ts +0 -1
- package/dist/hooks/useNextcloudSearch/useNextcloudSearch.d.ts +0 -14
- package/dist/hooks/useNextcloudSearch/useNextcloudSearch.js +0 -64
- package/dist/modules/multimedia/FileCard/GoogleDriveFileCard.d.ts +0 -25
- package/dist/modules/multimedia/FileCard/GoogleDriveFileCard.js +0 -102
- package/dist/modules/multimedia/FileCard/NextcloudFileCard.d.ts +0 -25
- package/dist/modules/multimedia/FileCard/NextcloudFileCard.js +0 -102
- package/dist/modules/multimedia/GoogleDrive/GoogleDrive.d.ts +0 -24
- package/dist/modules/multimedia/GoogleDrive/GoogleDrive.js +0 -103
- package/dist/modules/multimedia/GoogleDrive/index.d.ts +0 -2
- package/dist/modules/multimedia/MediaLibrary/innertabs/GoogleDrive.d.ts +0 -1
- package/dist/modules/multimedia/MediaLibrary/innertabs/GoogleDrive.js +0 -61
- package/dist/modules/multimedia/MediaLibrary/innertabs/Nextcloud.d.ts +0 -1
- package/dist/modules/multimedia/MediaLibrary/innertabs/Nextcloud.js +0 -48
- package/dist/modules/multimedia/Nextcloud/Nextcloud.d.ts +0 -24
- package/dist/modules/multimedia/Nextcloud/Nextcloud.js +0 -124
- package/dist/modules/multimedia/Nextcloud/index.d.ts +0 -2
|
@@ -1,103 +0,0 @@
|
|
|
1
|
-
import { jsxs, jsx } from "react/jsx-runtime";
|
|
2
|
-
import { useState, useEffect, useMemo, useCallback } from "react";
|
|
3
|
-
import { DocumentHelper } from "@edifice.io/client";
|
|
4
|
-
import clsx from "clsx";
|
|
5
|
-
import { useTranslation } from "react-i18next";
|
|
6
|
-
import { findNodeById } from "../../../components/Tree/utilities/tree.js";
|
|
7
|
-
import SvgIconSortAscendingLetters from "../../icons/components/IconSortAscendingLetters.js";
|
|
8
|
-
import SvgIconSortDescendingLetters from "../../icons/components/IconSortDescendingLetters.js";
|
|
9
|
-
import SvgIconSortTime from "../../icons/components/IconSortTime.js";
|
|
10
|
-
import illuError from "@edifice.io/bootstrap/dist/images/emptyscreen/illu-error.svg";
|
|
11
|
-
import illuTrash from "@edifice.io/bootstrap/dist/images/emptyscreen/illu-trash.svg";
|
|
12
|
-
import useUser from "../../../hooks/useUser/useUser.js";
|
|
13
|
-
import useGoogleDriveSearch from "../../../hooks/useGoogleDriveSearch/useGoogleDriveSearch.js";
|
|
14
|
-
import { Grid } from "../../../components/Grid/Grid.js";
|
|
15
|
-
import Tree from "../../../components/Tree/components/Tree.js";
|
|
16
|
-
import SearchBar from "../../../components/SearchBar/SearchBar.js";
|
|
17
|
-
import Flex from "../../../components/Flex/Flex.js";
|
|
18
|
-
import Dropdown from "../../../components/Dropdown/Dropdown.js";
|
|
19
|
-
import EmptyScreen from "../../../components/EmptyScreen/EmptyScreen.js";
|
|
20
|
-
import Button from "../../../components/Button/Button.js";
|
|
21
|
-
import LoadingScreen from "../../../components/LoadingScreen/LoadingScreen.js";
|
|
22
|
-
import GoogleDriveFileCard from "../FileCard/GoogleDriveFileCard.js";
|
|
23
|
-
const ROOT_ID = "root", SHARED_ROOT_ID = "shared";
|
|
24
|
-
function compare(a, b) {
|
|
25
|
-
return a === b ? 0 : a === void 0 ? -1 : b === void 0 ? 1 : a.localeCompare(b);
|
|
26
|
-
}
|
|
27
|
-
const GoogleDrive = ({
|
|
28
|
-
onSelect,
|
|
29
|
-
multiple = !0,
|
|
30
|
-
roles,
|
|
31
|
-
className
|
|
32
|
-
}) => {
|
|
33
|
-
const {
|
|
34
|
-
t
|
|
35
|
-
} = useTranslation(), {
|
|
36
|
-
user
|
|
37
|
-
} = useUser(), myDrive = useGoogleDriveSearch(ROOT_ID, t("google-drive.mydrive"), user == null ? void 0 : user.userId), sharedWithMe = useGoogleDriveSearch(SHARED_ROOT_ID, t("workspace.tree.shared"), user == null ? void 0 : user.userId, "shared"), [currentNodeId, setCurrentNodeId] = useState(ROOT_ID), sectionOf = (nodeId) => findNodeById(sharedWithMe.root, nodeId) ? sharedWithMe : myDrive, {
|
|
38
|
-
root,
|
|
39
|
-
loadContent,
|
|
40
|
-
loadError
|
|
41
|
-
} = sectionOf(currentNodeId), currentNode = findNodeById(root, currentNodeId) ?? root, [searchTerm, setSearchTerm] = useState(void 0), [sortOrder, setSortOrder] = useState(["modified", "desc"]), [selectedDocuments, setSelectedDocuments] = useState([]), handleTreeItemChange = (nodeId) => {
|
|
42
|
-
setCurrentNodeId(nodeId), sectionOf(nodeId).loadContent(nodeId);
|
|
43
|
-
}, loadMyDrive = myDrive.loadContent;
|
|
44
|
-
useEffect(() => {
|
|
45
|
-
loadMyDrive(ROOT_ID);
|
|
46
|
-
}, [loadMyDrive]);
|
|
47
|
-
const documents = useMemo(() => {
|
|
48
|
-
if (!currentNode.files) return;
|
|
49
|
-
const matchesRole = (doc) => {
|
|
50
|
-
if (!roles) return !0;
|
|
51
|
-
const role = DocumentHelper.role(doc.contentType, !1);
|
|
52
|
-
return Array.isArray(roles) ? roles.includes(role) : roles === role;
|
|
53
|
-
}, normalizedSearchTerm = searchTerm == null ? void 0 : searchTerm.toLowerCase(), list = currentNode.files.filter((f) => (
|
|
54
|
-
// A document that can't leave Google Drive could never be added.
|
|
55
|
-
f.canCopyToWorkspace && (!normalizedSearchTerm || f.name.toLowerCase().includes(normalizedSearchTerm)) && matchesRole(f)
|
|
56
|
-
));
|
|
57
|
-
let sortFunction;
|
|
58
|
-
return sortOrder[0] === "name" ? sortFunction = sortOrder[1] === "asc" ? (a, b) => compare(a.name, b.name) : (a, b) => compare(b.name, a.name) : sortFunction = (a, b) => compare(b.lastModified, a.lastModified), list.sort(sortFunction);
|
|
59
|
-
}, [currentNode, searchTerm, sortOrder, roles]), selectedIds = useMemo(() => new Set(selectedDocuments.map((d) => d.id)), [selectedDocuments]), handleSearchChange = useCallback((e) => {
|
|
60
|
-
setSearchTerm(e.target.value);
|
|
61
|
-
}, [setSearchTerm]);
|
|
62
|
-
function getSortOrderLabel() {
|
|
63
|
-
return sortOrder[0] === "name" ? sortOrder[1] === "asc" ? t("sort.order.alpha.asc") : t("sort.order.alpha.desc") : t("sort.order.modify.desc");
|
|
64
|
-
}
|
|
65
|
-
function handleSelectDoc(doc) {
|
|
66
|
-
let currentDocuments = [...selectedDocuments];
|
|
67
|
-
multiple ? currentDocuments.some((selectedDocument) => selectedDocument.id === doc.id) ? currentDocuments = currentDocuments.filter((selectedDocument) => selectedDocument.id !== doc.id) : currentDocuments = [...currentDocuments, doc] : currentDocuments = [doc], setSelectedDocuments(currentDocuments), onSelect(currentDocuments);
|
|
68
|
-
}
|
|
69
|
-
const googleDrive = clsx("workspace flex-grow-1 gap-0", className);
|
|
70
|
-
return /* @__PURE__ */ jsxs(Grid, { className: googleDrive, children: [
|
|
71
|
-
/* @__PURE__ */ jsx(Grid.Col, { sm: "12", md: "3", xl: "4", className: "workspace-folders p-12 pt-0 gap-12", children: /* @__PURE__ */ jsx("div", { style: {
|
|
72
|
-
position: "sticky",
|
|
73
|
-
top: 0,
|
|
74
|
-
paddingTop: "1.2rem"
|
|
75
|
-
}, children: /* @__PURE__ */ jsx(Tree, { nodes: [myDrive.root, sharedWithMe.root], selectedNodeId: currentNodeId, showIcon: !0, onTreeItemClick: handleTreeItemChange, onTreeItemUnfold: handleTreeItemChange }) }) }),
|
|
76
|
-
/* @__PURE__ */ jsx(Grid.Col, { sm: "12", md: "5", xl: "8", children: /* @__PURE__ */ jsxs(Grid, { className: "flex-grow-1 gap-0", children: [
|
|
77
|
-
/* @__PURE__ */ jsxs(Grid.Col, { sm: "4", md: "8", xl: "12", children: [
|
|
78
|
-
/* @__PURE__ */ jsx("div", { className: "workspace-search px-16 py-8 ", children: /* @__PURE__ */ jsx(SearchBar, { isVariant: !0, className: "gap-16", onChange: handleSearchChange }) }),
|
|
79
|
-
/* @__PURE__ */ jsxs(Flex, { className: "px-8 py-4", align: "center", justify: "end", children: [
|
|
80
|
-
/* @__PURE__ */ jsx("small", { className: "text-muted", children: t("workspace.search.order") }),
|
|
81
|
-
/* @__PURE__ */ jsxs(Dropdown, { children: [
|
|
82
|
-
/* @__PURE__ */ jsx(Dropdown.Trigger, { size: "sm", label: getSortOrderLabel(), variant: "ghost" }),
|
|
83
|
-
/* @__PURE__ */ jsxs(Dropdown.Menu, { children: [
|
|
84
|
-
/* @__PURE__ */ jsx(Dropdown.Item, { icon: /* @__PURE__ */ jsx(SvgIconSortTime, {}), onClick: () => setSortOrder(["modified", "desc"]), children: t("sort.order.modify.desc") }),
|
|
85
|
-
/* @__PURE__ */ jsx(Dropdown.Item, { icon: /* @__PURE__ */ jsx(SvgIconSortAscendingLetters, {}), onClick: () => setSortOrder(["name", "asc"]), children: t("sort.order.alpha.asc") }),
|
|
86
|
-
/* @__PURE__ */ jsx(Dropdown.Item, { icon: /* @__PURE__ */ jsx(SvgIconSortDescendingLetters, {}), onClick: () => setSortOrder(["name", "desc"]), children: t("sort.order.alpha.desc") })
|
|
87
|
-
] })
|
|
88
|
-
] })
|
|
89
|
-
] })
|
|
90
|
-
] }),
|
|
91
|
-
/* @__PURE__ */ jsx(Grid.Col, { sm: "4", md: "8", xl: "12", className: "p-8 gap-8", children: loadError ? /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "12", className: "h-full w-100", justify: "center", align: "center", children: [
|
|
92
|
-
/* @__PURE__ */ jsx(EmptyScreen, { imageSrc: illuError, title: t("google-drive.error.title"), text: t("google-drive.error.description") }),
|
|
93
|
-
/* @__PURE__ */ jsx(Button, { onClick: () => loadContent(currentNodeId), children: t("retry") })
|
|
94
|
-
] }) : documents ? documents.length !== 0 ? /* @__PURE__ */ jsx("div", { className: "grid grid-workspace", children: documents.map((doc) => {
|
|
95
|
-
const isSelected = selectedIds.has(doc.id);
|
|
96
|
-
return /* @__PURE__ */ jsx(GoogleDriveFileCard, { doc, userId: user.userId, isSelected, onClick: () => handleSelectDoc(doc) }, doc.id);
|
|
97
|
-
}) }) : /* @__PURE__ */ jsx(EmptyScreen, { imageSrc: illuTrash, text: t("workspace.empty.docSpace"), title: t("explorer.emptyScreen.trash.title") }) : /* @__PURE__ */ jsx(LoadingScreen, {}) })
|
|
98
|
-
] }) })
|
|
99
|
-
] });
|
|
100
|
-
};
|
|
101
|
-
export {
|
|
102
|
-
GoogleDrive as default
|
|
103
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const GoogleDrive: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { odeServices, GoogleDriveCopyError } from "@edifice.io/client";
|
|
3
|
-
import { useTranslation } from "react-i18next";
|
|
4
|
-
import { useMediaLibraryContext } from "../MediaLibraryContext.js";
|
|
5
|
-
import useUser from "../../../../hooks/useUser/useUser.js";
|
|
6
|
-
import useToast from "../../../../hooks/useToast/useToast.js";
|
|
7
|
-
import GoogleDrive$1 from "../../GoogleDrive/GoogleDrive.js";
|
|
8
|
-
const GoogleDrive = () => {
|
|
9
|
-
const {
|
|
10
|
-
appCode,
|
|
11
|
-
visibility,
|
|
12
|
-
type,
|
|
13
|
-
setResultCounter,
|
|
14
|
-
setResult,
|
|
15
|
-
setPreSuccess,
|
|
16
|
-
multiple
|
|
17
|
-
} = useMediaLibraryContext(), {
|
|
18
|
-
user
|
|
19
|
-
} = useUser(), {
|
|
20
|
-
t
|
|
21
|
-
} = useTranslation(), toast = useToast();
|
|
22
|
-
function getDocumentRoleFilter() {
|
|
23
|
-
switch (type) {
|
|
24
|
-
case "image":
|
|
25
|
-
return "img";
|
|
26
|
-
case "audio":
|
|
27
|
-
return "audio";
|
|
28
|
-
case "video":
|
|
29
|
-
return "video";
|
|
30
|
-
default:
|
|
31
|
-
return null;
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
async function copyToWorkspace(userId, ids) {
|
|
35
|
-
try {
|
|
36
|
-
return await odeServices.googledrive().copyDocumentToWorkspace(
|
|
37
|
-
userId,
|
|
38
|
-
ids,
|
|
39
|
-
void 0,
|
|
40
|
-
// Copy the documents straight to their final place, the way an upload
|
|
41
|
-
// does, instead of leaving a copy in the user's own documents for the
|
|
42
|
-
// modal to transfer afterwards.
|
|
43
|
-
{
|
|
44
|
-
application: appCode,
|
|
45
|
-
visibility
|
|
46
|
-
}
|
|
47
|
-
);
|
|
48
|
-
} catch (error) {
|
|
49
|
-
if (error instanceof GoogleDriveCopyError && error.copied.length > 0)
|
|
50
|
-
return toast.warning(t("google-drive.transfer.error")), error.copied;
|
|
51
|
-
throw error;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
function handleSelect(result) {
|
|
55
|
-
setResultCounter(result.length), result.length ? (setResult(result), setPreSuccess(() => () => user != null && user.userId ? copyToWorkspace(user.userId, result.map((doc) => doc.id)) : Promise.resolve([]))) : (setResult(), setPreSuccess(void 0));
|
|
56
|
-
}
|
|
57
|
-
return /* @__PURE__ */ jsx(GoogleDrive$1, { roles: getDocumentRoleFilter(), onSelect: handleSelect, multiple, className: "border rounded overflow-y-auto" });
|
|
58
|
-
};
|
|
59
|
-
export {
|
|
60
|
-
GoogleDrive
|
|
61
|
-
};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
export declare const Nextcloud: () => import("react/jsx-runtime").JSX.Element;
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import { jsx } from "react/jsx-runtime";
|
|
2
|
-
import { odeServices } from "@edifice.io/client";
|
|
3
|
-
import { useMediaLibraryContext } from "../MediaLibraryContext.js";
|
|
4
|
-
import useUser from "../../../../hooks/useUser/useUser.js";
|
|
5
|
-
import Nextcloud$1 from "../../Nextcloud/Nextcloud.js";
|
|
6
|
-
const Nextcloud = () => {
|
|
7
|
-
const {
|
|
8
|
-
appCode,
|
|
9
|
-
visibility,
|
|
10
|
-
type,
|
|
11
|
-
setResultCounter,
|
|
12
|
-
setResult,
|
|
13
|
-
setPreSuccess,
|
|
14
|
-
multiple
|
|
15
|
-
} = useMediaLibraryContext(), {
|
|
16
|
-
user
|
|
17
|
-
} = useUser();
|
|
18
|
-
function getDocumentRoleFilter() {
|
|
19
|
-
switch (type) {
|
|
20
|
-
case "image":
|
|
21
|
-
return "img";
|
|
22
|
-
case "audio":
|
|
23
|
-
return "audio";
|
|
24
|
-
case "video":
|
|
25
|
-
return "video";
|
|
26
|
-
default:
|
|
27
|
-
return null;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
function handleSelect(result) {
|
|
31
|
-
setResultCounter(result.length), result.length ? (setResult(result), setPreSuccess(() => () => user != null && user.userId ? odeServices.nextcloud().copyDocumentToWorkspace(
|
|
32
|
-
user.userId,
|
|
33
|
-
result.map((doc) => doc.path),
|
|
34
|
-
void 0,
|
|
35
|
-
// Copy the documents straight to their final place, the way an
|
|
36
|
-
// upload does, instead of leaving a copy in the user's own
|
|
37
|
-
// documents for the modal to transfer afterwards.
|
|
38
|
-
{
|
|
39
|
-
application: appCode,
|
|
40
|
-
visibility
|
|
41
|
-
}
|
|
42
|
-
) : Promise.resolve([]))) : (setResult(), setPreSuccess(void 0));
|
|
43
|
-
}
|
|
44
|
-
return /* @__PURE__ */ jsx(Nextcloud$1, { roles: getDocumentRoleFilter(), onSelect: handleSelect, multiple, className: "border rounded overflow-y-auto" });
|
|
45
|
-
};
|
|
46
|
-
export {
|
|
47
|
-
Nextcloud
|
|
48
|
-
};
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
import { NextcloudDocument, Role } from '@edifice.io/client';
|
|
2
|
-
/**
|
|
3
|
-
* Nextcloud component properties
|
|
4
|
-
*/
|
|
5
|
-
export interface NextcloudProps {
|
|
6
|
-
/**
|
|
7
|
-
* Notify parent when media elements are successfully selected.
|
|
8
|
-
*/
|
|
9
|
-
onSelect: (result: NextcloudDocument[]) => void;
|
|
10
|
-
/**
|
|
11
|
-
* Boolean to know if we can select 1 or many files.
|
|
12
|
-
*/
|
|
13
|
-
multiple?: boolean | undefined;
|
|
14
|
-
/**
|
|
15
|
-
* Document roles to filter files by; null (default) shows all roles.
|
|
16
|
-
*/
|
|
17
|
-
roles?: Role | Role[] | null;
|
|
18
|
-
/**
|
|
19
|
-
* Optional class for styling purpose
|
|
20
|
-
*/
|
|
21
|
-
className?: string;
|
|
22
|
-
}
|
|
23
|
-
declare const Nextcloud: ({ onSelect, multiple, roles, className, }: NextcloudProps) => import("react/jsx-runtime").JSX.Element;
|
|
24
|
-
export default Nextcloud;
|
|
@@ -1,124 +0,0 @@
|
|
|
1
|
-
import { jsx, jsxs } from "react/jsx-runtime";
|
|
2
|
-
import { useRef, useState, useCallback, useEffect, useMemo } from "react";
|
|
3
|
-
import { DocumentHelper } from "@edifice.io/client";
|
|
4
|
-
import clsx from "clsx";
|
|
5
|
-
import { useTranslation } from "react-i18next";
|
|
6
|
-
import { findNodeById } from "../../../components/Tree/utilities/tree.js";
|
|
7
|
-
import SvgIconSortAscendingLetters from "../../icons/components/IconSortAscendingLetters.js";
|
|
8
|
-
import SvgIconSortDescendingLetters from "../../icons/components/IconSortDescendingLetters.js";
|
|
9
|
-
import SvgIconSortTime from "../../icons/components/IconSortTime.js";
|
|
10
|
-
import illuError from "@edifice.io/bootstrap/dist/images/emptyscreen/illu-error.svg";
|
|
11
|
-
import illuConnectionLost from "@edifice.io/bootstrap/dist/images/emptyscreen/illu-connection-lost.svg";
|
|
12
|
-
import illuTrash from "@edifice.io/bootstrap/dist/images/emptyscreen/illu-trash.svg";
|
|
13
|
-
import useUser from "../../../hooks/useUser/useUser.js";
|
|
14
|
-
import useToast from "../../../hooks/useToast/useToast.js";
|
|
15
|
-
import useNextcloudSearch from "../../../hooks/useNextcloudSearch/useNextcloudSearch.js";
|
|
16
|
-
import LoadingScreen from "../../../components/LoadingScreen/LoadingScreen.js";
|
|
17
|
-
import Flex from "../../../components/Flex/Flex.js";
|
|
18
|
-
import EmptyScreen from "../../../components/EmptyScreen/EmptyScreen.js";
|
|
19
|
-
import Button from "../../../components/Button/Button.js";
|
|
20
|
-
import { Grid } from "../../../components/Grid/Grid.js";
|
|
21
|
-
import Tree from "../../../components/Tree/components/Tree.js";
|
|
22
|
-
import SearchBar from "../../../components/SearchBar/SearchBar.js";
|
|
23
|
-
import Dropdown from "../../../components/Dropdown/Dropdown.js";
|
|
24
|
-
import NextcloudFileCard from "../FileCard/NextcloudFileCard.js";
|
|
25
|
-
const ROOT_ID = "root";
|
|
26
|
-
function compare(a, b) {
|
|
27
|
-
return a === b ? 0 : a === void 0 ? -1 : b === void 0 ? 1 : a.localeCompare(b);
|
|
28
|
-
}
|
|
29
|
-
const Nextcloud = ({
|
|
30
|
-
onSelect,
|
|
31
|
-
multiple = !0,
|
|
32
|
-
roles,
|
|
33
|
-
className
|
|
34
|
-
}) => {
|
|
35
|
-
const {
|
|
36
|
-
t
|
|
37
|
-
} = useTranslation(), {
|
|
38
|
-
user
|
|
39
|
-
} = useUser(), toast = useToast(), {
|
|
40
|
-
root,
|
|
41
|
-
needsAuth,
|
|
42
|
-
isCheckingAuth,
|
|
43
|
-
isAuthError,
|
|
44
|
-
refetchAuthStatus,
|
|
45
|
-
loadContent,
|
|
46
|
-
loadError
|
|
47
|
-
} = useNextcloudSearch(ROOT_ID, t("nextcloud"), user == null ? void 0 : user.userId), popupRef = useRef(null), [currentNodeId, setCurrentNodeId] = useState(ROOT_ID), currentNode = findNodeById(root, currentNodeId) ?? root, [searchTerm, setSearchTerm] = useState(void 0), [sortOrder, setSortOrder] = useState(["modified", "desc"]), [selectedDocuments, setSelectedDocuments] = useState([]), handleTreeItemChange = useCallback((nodeId) => {
|
|
48
|
-
setCurrentNodeId(nodeId), loadContent(nodeId);
|
|
49
|
-
}, [loadContent]);
|
|
50
|
-
useEffect(() => {
|
|
51
|
-
needsAuth || loadContent(ROOT_ID);
|
|
52
|
-
}, [loadContent, needsAuth]);
|
|
53
|
-
const documents = useMemo(() => {
|
|
54
|
-
if (!currentNode.files) return;
|
|
55
|
-
const matchesRole = (doc) => {
|
|
56
|
-
if (!roles) return !0;
|
|
57
|
-
const role = DocumentHelper.role(doc.contentType, !1);
|
|
58
|
-
return Array.isArray(roles) ? roles.includes(role) : roles === role;
|
|
59
|
-
}, normalizedSearchTerm = searchTerm == null ? void 0 : searchTerm.toLowerCase(), list = currentNode.files.filter((f) => (!normalizedSearchTerm || f.name.toLowerCase().includes(normalizedSearchTerm)) && matchesRole(f));
|
|
60
|
-
let sortFunction;
|
|
61
|
-
return sortOrder[0] === "name" ? sortFunction = sortOrder[1] === "asc" ? (a, b) => compare(a.name, b.name) : (a, b) => compare(b.name, a.name) : sortFunction = (a, b) => compare(b.lastModified, a.lastModified), list.sort(sortFunction);
|
|
62
|
-
}, [currentNode, searchTerm, sortOrder, roles]), selectedPaths = useMemo(() => new Set(selectedDocuments.map((d) => d.path)), [selectedDocuments]), handleSearchChange = useCallback((e) => {
|
|
63
|
-
setSearchTerm(e.target.value);
|
|
64
|
-
}, [setSearchTerm]);
|
|
65
|
-
function getSortOrderLabel() {
|
|
66
|
-
return sortOrder[0] === "name" ? sortOrder[1] === "asc" ? t("sort.order.alpha.asc") : t("sort.order.alpha.desc") : t("sort.order.modify.desc");
|
|
67
|
-
}
|
|
68
|
-
function handleSelectDoc(doc) {
|
|
69
|
-
let currentDocuments = [...selectedDocuments];
|
|
70
|
-
multiple ? currentDocuments.some((selectedDocument) => selectedDocument.path === doc.path) ? currentDocuments = currentDocuments.filter((selectedDocument) => selectedDocument.path !== doc.path) : currentDocuments = [...currentDocuments, doc] : currentDocuments = [doc], setSelectedDocuments(currentDocuments), onSelect(currentDocuments);
|
|
71
|
-
}
|
|
72
|
-
const nextcloud = clsx("workspace flex-grow-1 gap-0", className), openLoginPopup = () => {
|
|
73
|
-
popupRef.current = window.open(`${window.location.origin}/nextcloud/user/oauth2/init`, "", "popup, height=600, width=400"), popupRef.current || toast.error(t("nextcloud.auth.popupBlocked"));
|
|
74
|
-
};
|
|
75
|
-
return useEffect(() => {
|
|
76
|
-
function handleMessage(event) {
|
|
77
|
-
var _a;
|
|
78
|
-
event.origin !== window.location.origin || ((_a = event.data) == null ? void 0 : _a.type) !== "nextcloud-connected" || (popupRef.current && !popupRef.current.closed && popupRef.current.close(), refetchAuthStatus());
|
|
79
|
-
}
|
|
80
|
-
return window.addEventListener("message", handleMessage), () => window.removeEventListener("message", handleMessage);
|
|
81
|
-
}, [refetchAuthStatus]), isCheckingAuth ? /* @__PURE__ */ jsx(LoadingScreen, {}) : isAuthError ? /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "12", className: "h-full w-100", justify: "center", align: "center", children: [
|
|
82
|
-
/* @__PURE__ */ jsx(EmptyScreen, { imageSrc: illuError, title: t("nextcloud.error.title"), text: t("nextcloud.error.description") }),
|
|
83
|
-
/* @__PURE__ */ jsx(Button, { onClick: () => refetchAuthStatus(), children: t("retry") })
|
|
84
|
-
] }) : needsAuth ? /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "12", className: "h-full w-100", justify: "center", align: "center", children: [
|
|
85
|
-
/* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "8", justify: "center", align: "center", children: [
|
|
86
|
-
/* @__PURE__ */ jsx(EmptyScreen, { imageSrc: illuConnectionLost }),
|
|
87
|
-
/* @__PURE__ */ jsx("h2", { className: "h2 text-secondary mb-8", children: t("nextcloud.auth.title") }),
|
|
88
|
-
/* @__PURE__ */ jsx("div", { className: "text", children: t("nextcloud.auth.description") })
|
|
89
|
-
] }),
|
|
90
|
-
/* @__PURE__ */ jsx(Button, { onClick: openLoginPopup, children: t("nextcloud.auth.connect") })
|
|
91
|
-
] }) : /* @__PURE__ */ jsxs(Grid, { className: nextcloud, children: [
|
|
92
|
-
/* @__PURE__ */ jsx(Grid.Col, { sm: "12", md: "3", xl: "4", className: "workspace-folders p-12 pt-0 gap-12", children: /* @__PURE__ */ jsx("div", { style: {
|
|
93
|
-
position: "sticky",
|
|
94
|
-
top: 0,
|
|
95
|
-
paddingTop: "1.2rem"
|
|
96
|
-
}, children: /* @__PURE__ */ jsx(Tree, { nodes: root, selectedNodeId: currentNodeId, showIcon: !0, onTreeItemClick: handleTreeItemChange, onTreeItemUnfold: handleTreeItemChange }) }) }),
|
|
97
|
-
/* @__PURE__ */ jsx(Grid.Col, { sm: "12", md: "5", xl: "8", children: /* @__PURE__ */ jsxs(Grid, { className: "flex-grow-1 gap-0", children: [
|
|
98
|
-
/* @__PURE__ */ jsxs(Grid.Col, { sm: "4", md: "8", xl: "12", children: [
|
|
99
|
-
/* @__PURE__ */ jsx("div", { className: "workspace-search px-16 py-8 ", children: /* @__PURE__ */ jsx(SearchBar, { isVariant: !0, className: "gap-16", onChange: handleSearchChange }) }),
|
|
100
|
-
/* @__PURE__ */ jsxs(Flex, { className: "px-8 py-4", align: "center", justify: "end", children: [
|
|
101
|
-
/* @__PURE__ */ jsx("small", { className: "text-muted", children: t("workspace.search.order") }),
|
|
102
|
-
/* @__PURE__ */ jsxs(Dropdown, { children: [
|
|
103
|
-
/* @__PURE__ */ jsx(Dropdown.Trigger, { size: "sm", label: getSortOrderLabel(), variant: "ghost" }),
|
|
104
|
-
/* @__PURE__ */ jsxs(Dropdown.Menu, { children: [
|
|
105
|
-
/* @__PURE__ */ jsx(Dropdown.Item, { icon: /* @__PURE__ */ jsx(SvgIconSortTime, {}), onClick: () => setSortOrder(["modified", "desc"]), children: t("sort.order.modify.desc") }),
|
|
106
|
-
/* @__PURE__ */ jsx(Dropdown.Item, { icon: /* @__PURE__ */ jsx(SvgIconSortAscendingLetters, {}), onClick: () => setSortOrder(["name", "asc"]), children: t("sort.order.alpha.asc") }),
|
|
107
|
-
/* @__PURE__ */ jsx(Dropdown.Item, { icon: /* @__PURE__ */ jsx(SvgIconSortDescendingLetters, {}), onClick: () => setSortOrder(["name", "desc"]), children: t("sort.order.alpha.desc") })
|
|
108
|
-
] })
|
|
109
|
-
] })
|
|
110
|
-
] })
|
|
111
|
-
] }),
|
|
112
|
-
/* @__PURE__ */ jsx(Grid.Col, { sm: "4", md: "8", xl: "12", className: "p-8 gap-8", children: loadError ? /* @__PURE__ */ jsxs(Flex, { direction: "column", gap: "12", className: "h-full w-100", justify: "center", align: "center", children: [
|
|
113
|
-
/* @__PURE__ */ jsx(EmptyScreen, { imageSrc: illuError, title: t("nextcloud.error.title"), text: t("nextcloud.error.description") }),
|
|
114
|
-
/* @__PURE__ */ jsx(Button, { onClick: () => loadContent(currentNodeId), children: t("retry") })
|
|
115
|
-
] }) : documents ? documents.length !== 0 ? /* @__PURE__ */ jsx("div", { className: "grid grid-workspace", children: documents.map((doc) => {
|
|
116
|
-
const isSelected = selectedPaths.has(doc.path);
|
|
117
|
-
return /* @__PURE__ */ jsx(NextcloudFileCard, { doc, userId: user.userId, isSelected, onClick: () => handleSelectDoc(doc) }, doc.path);
|
|
118
|
-
}) }) : /* @__PURE__ */ jsx(EmptyScreen, { imageSrc: illuTrash, text: t("workspace.empty.docSpace"), title: t("explorer.emptyScreen.trash.title") }) : /* @__PURE__ */ jsx(LoadingScreen, {}) })
|
|
119
|
-
] }) })
|
|
120
|
-
] });
|
|
121
|
-
};
|
|
122
|
-
export {
|
|
123
|
-
Nextcloud as default
|
|
124
|
-
};
|