@ndla/ui 30.9.0 → 31.0.0
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/es/TreeStructure/AddFolderButton.js +2 -2
- package/es/TreeStructure/ComboboxButton.js +2 -2
- package/es/TreeStructure/FolderItem.js +11 -10
- package/es/TreeStructure/FolderItems.js +28 -37
- package/es/TreeStructure/TreeStructure.js +7 -7
- package/lib/TreeStructure/AddFolderButton.d.ts +2 -2
- package/lib/TreeStructure/AddFolderButton.js +2 -2
- package/lib/TreeStructure/ComboboxButton.d.ts +7 -6
- package/lib/TreeStructure/ComboboxButton.js +2 -2
- package/lib/TreeStructure/FolderItem.d.ts +5 -3
- package/lib/TreeStructure/FolderItem.js +11 -10
- package/lib/TreeStructure/FolderItems.d.ts +4 -3
- package/lib/TreeStructure/FolderItems.js +28 -36
- package/lib/TreeStructure/TreeStructure.d.ts +3 -2
- package/lib/TreeStructure/TreeStructure.js +7 -7
- package/lib/TreeStructure/arrowNavigation.d.ts +2 -2
- package/lib/TreeStructure/helperFunctions.d.ts +3 -2
- package/lib/TreeStructure/index.d.ts +0 -1
- package/lib/TreeStructure/types.d.ts +5 -9
- package/lib/index.d.ts +1 -1
- package/package.json +2 -2
- package/src/TreeStructure/AddFolderButton.tsx +2 -2
- package/src/TreeStructure/ComboboxButton.tsx +7 -6
- package/src/TreeStructure/FolderItem.tsx +10 -7
- package/src/TreeStructure/FolderItems.tsx +31 -36
- package/src/TreeStructure/TreeStructure.tsx +6 -6
- package/src/TreeStructure/arrowNavigation.ts +5 -5
- package/src/TreeStructure/helperFunctions.ts +4 -3
- package/src/TreeStructure/index.ts +0 -1
- package/src/TreeStructure/types.ts +5 -10
- package/src/index.ts +1 -1
- package/es/TreeStructure/NavigationLink.js +0 -91
- package/lib/TreeStructure/NavigationLink.d.ts +0 -14
- package/lib/TreeStructure/NavigationLink.js +0 -93
- package/src/TreeStructure/NavigationLink.tsx +0 -107
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
import React, { ReactNode } from 'react';
|
|
10
10
|
import styled from '@emotion/styled';
|
|
11
11
|
import { animations } from '@ndla/core';
|
|
12
|
+
import { IFolder } from '@ndla/types-learningpath-api';
|
|
12
13
|
import FolderItem from './FolderItem';
|
|
13
|
-
import { CommonFolderItemsProps,
|
|
14
|
-
import NavigationLink from './NavigationLink';
|
|
14
|
+
import { CommonFolderItemsProps, NewFolderInputFunc, OnCreatedFunc, TreeStructureType } from './types';
|
|
15
15
|
import { treestructureId } from './helperFunctions';
|
|
16
16
|
|
|
17
17
|
const StyledUL = styled.ul`
|
|
@@ -38,11 +38,11 @@ const StyledLI = styled.li<StyledLiProps>`
|
|
|
38
38
|
`;
|
|
39
39
|
|
|
40
40
|
export interface FolderItemsProps extends CommonFolderItemsProps {
|
|
41
|
-
folders:
|
|
41
|
+
folders: IFolder[];
|
|
42
42
|
newFolderParentId: string | undefined;
|
|
43
43
|
onCancelNewFolder: () => void;
|
|
44
44
|
openFolders: string[];
|
|
45
|
-
parentFolder?:
|
|
45
|
+
parentFolder?: IFolder;
|
|
46
46
|
children?: ReactNode;
|
|
47
47
|
onCreate: OnCreatedFunc;
|
|
48
48
|
newFolderInput?: NewFolderInputFunc;
|
|
@@ -74,44 +74,39 @@ const FolderItems = ({
|
|
|
74
74
|
aria-labelledby={level === 0 && type === 'picker' ? treestructureId(type, 'label') : undefined}
|
|
75
75
|
role={level === 0 ? 'tree' : 'group'}>
|
|
76
76
|
{children}
|
|
77
|
-
{folders.map((folder) => {
|
|
77
|
+
{folders.map((folder, index) => {
|
|
78
78
|
const { subfolders, id } = folder;
|
|
79
79
|
const isOpen = openFolders?.includes(id);
|
|
80
80
|
|
|
81
81
|
return (
|
|
82
82
|
<StyledLI key={id} tabIndex={-1} role="none" type={type}>
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
{
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
{...rest}>
|
|
109
|
-
{newFolderParentId === id && (
|
|
110
|
-
<li role="none">{newFolderInput?.({ parentId: id, onClose: onCancelNewFolder, onCreate })}</li>
|
|
111
|
-
)}
|
|
112
|
-
</FolderItems>
|
|
83
|
+
<FolderItem
|
|
84
|
+
index={index}
|
|
85
|
+
folder={folder}
|
|
86
|
+
isOpen={isOpen}
|
|
87
|
+
level={level}
|
|
88
|
+
loading={loading}
|
|
89
|
+
type={type}
|
|
90
|
+
isCreatingFolder={!!newFolderParentId}
|
|
91
|
+
{...rest}
|
|
92
|
+
/>
|
|
93
|
+
{((subfolders && isOpen) || newFolderParentId === id) && (
|
|
94
|
+
<FolderItems
|
|
95
|
+
parentFolder={folder}
|
|
96
|
+
folders={subfolders}
|
|
97
|
+
level={level + 1}
|
|
98
|
+
loading={loading}
|
|
99
|
+
type={type}
|
|
100
|
+
newFolderParentId={newFolderParentId}
|
|
101
|
+
onCancelNewFolder={onCancelNewFolder}
|
|
102
|
+
openFolders={openFolders}
|
|
103
|
+
newFolderInput={newFolderInput}
|
|
104
|
+
onCreate={onCreate}
|
|
105
|
+
{...rest}>
|
|
106
|
+
{newFolderParentId === id && (
|
|
107
|
+
<li role="none">{newFolderInput?.({ parentId: id, onClose: onCancelNewFolder, onCreate })}</li>
|
|
113
108
|
)}
|
|
114
|
-
|
|
109
|
+
</FolderItems>
|
|
115
110
|
)}
|
|
116
111
|
</StyledLI>
|
|
117
112
|
);
|
|
@@ -14,7 +14,7 @@ import { uniq } from 'lodash';
|
|
|
14
14
|
import { IFolder } from '@ndla/types-learningpath-api';
|
|
15
15
|
import FolderItems from './FolderItems';
|
|
16
16
|
import { flattenFolders, treestructureId } from './helperFunctions';
|
|
17
|
-
import { CommonTreeStructureProps,
|
|
17
|
+
import { CommonTreeStructureProps, NewFolderInputFunc, TreeStructureType } from './types';
|
|
18
18
|
import ComboboxButton from './ComboboxButton';
|
|
19
19
|
import AddFolderButton from './AddFolderButton';
|
|
20
20
|
|
|
@@ -69,7 +69,7 @@ const ScrollableDiv = styled.div<ScrollableDivProps>`
|
|
|
69
69
|
|
|
70
70
|
export interface TreeStructureProps extends CommonTreeStructureProps {
|
|
71
71
|
defaultOpenFolders?: string[];
|
|
72
|
-
folders:
|
|
72
|
+
folders: IFolder[];
|
|
73
73
|
label?: string;
|
|
74
74
|
maxLevel?: number;
|
|
75
75
|
newFolderInput?: NewFolderInputFunc;
|
|
@@ -96,8 +96,8 @@ const TreeStructure = ({
|
|
|
96
96
|
const [openFolders, setOpenFolders] = useState<string[]>(defaultOpenFolders || []);
|
|
97
97
|
|
|
98
98
|
const [newFolderParentId, setNewFolderParentId] = useState<string | undefined>();
|
|
99
|
-
const [focusedFolder, _setFocusedFolder] = useState<
|
|
100
|
-
const [selectedFolder, _setSelectedFolder] = useState<
|
|
99
|
+
const [focusedFolder, _setFocusedFolder] = useState<IFolder | undefined>();
|
|
100
|
+
const [selectedFolder, _setSelectedFolder] = useState<IFolder | undefined>();
|
|
101
101
|
const [showTree, setShowTree] = useState(type === 'navigation');
|
|
102
102
|
|
|
103
103
|
const flattenedFolders = useMemo(() => flattenFolders(folders, openFolders), [folders, openFolders]);
|
|
@@ -133,12 +133,12 @@ const TreeStructure = ({
|
|
|
133
133
|
}
|
|
134
134
|
};
|
|
135
135
|
|
|
136
|
-
const setSelectedFolder = (folder:
|
|
136
|
+
const setSelectedFolder = (folder: IFolder) => {
|
|
137
137
|
_setSelectedFolder(folder);
|
|
138
138
|
onSelectFolder?.(folder.id);
|
|
139
139
|
};
|
|
140
140
|
|
|
141
|
-
const setFocusedFolder = (folder:
|
|
141
|
+
const setFocusedFolder = (folder: IFolder) => {
|
|
142
142
|
_setFocusedFolder(folder);
|
|
143
143
|
setNewFolderParentId(undefined);
|
|
144
144
|
|
|
@@ -6,13 +6,13 @@
|
|
|
6
6
|
*
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
|
+
import { IFolder } from '@ndla/types-learningpath-api';
|
|
9
10
|
import { KeyboardEvent } from 'react';
|
|
10
|
-
import { FolderType } from './types';
|
|
11
11
|
|
|
12
12
|
const navigateVertical = (
|
|
13
|
-
visibleFolders:
|
|
13
|
+
visibleFolders: IFolder[],
|
|
14
14
|
folderId: string,
|
|
15
|
-
setFocusedFolderId: (id:
|
|
15
|
+
setFocusedFolderId: (id: IFolder) => void,
|
|
16
16
|
direction: 1 | -1,
|
|
17
17
|
) => {
|
|
18
18
|
const currentIndex = visibleFolders.findIndex((folder) => folder.id === folderId);
|
|
@@ -27,8 +27,8 @@ const arrowKeys = ['ArrowUp', 'ArrowDown', 'ArrowLeft', 'ArrowRight', 'Enter'];
|
|
|
27
27
|
export const arrowNavigation = (
|
|
28
28
|
e: KeyboardEvent<HTMLElement>,
|
|
29
29
|
id: string,
|
|
30
|
-
visibleFolders:
|
|
31
|
-
setFocusedFolderId: (id:
|
|
30
|
+
visibleFolders: IFolder[],
|
|
31
|
+
setFocusedFolderId: (id: IFolder) => void,
|
|
32
32
|
onOpen: (id: string) => void,
|
|
33
33
|
onClose: (id: string) => void,
|
|
34
34
|
) => {
|
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { IFolder } from '@ndla/types-learningpath-api';
|
|
2
|
+
import { TreeStructureType } from './types';
|
|
2
3
|
|
|
3
|
-
export const flattenFolders = (folders:
|
|
4
|
+
export const flattenFolders = (folders: IFolder[], openFolders?: string[]): IFolder[] => {
|
|
4
5
|
return folders.reduce((acc, { subfolders, id, ...rest }) => {
|
|
5
6
|
if (!subfolders || (openFolders && !openFolders.includes(id))) {
|
|
6
7
|
return acc.concat({ subfolders, id, ...rest });
|
|
7
8
|
}
|
|
8
9
|
return acc.concat({ subfolders, id, ...rest }, flattenFolders(subfolders, openFolders));
|
|
9
|
-
}, [] as
|
|
10
|
+
}, [] as IFolder[]);
|
|
10
11
|
};
|
|
11
12
|
|
|
12
13
|
export const treestructureId = (type: TreeStructureType, modifier: string) => {
|
|
@@ -9,11 +9,6 @@
|
|
|
9
9
|
import { ReactNode } from 'react';
|
|
10
10
|
import { IFolder, IResource } from '@ndla/types-learningpath-api';
|
|
11
11
|
|
|
12
|
-
export interface FolderType extends IFolder {
|
|
13
|
-
icon?: ReactNode;
|
|
14
|
-
isNavigation?: boolean;
|
|
15
|
-
}
|
|
16
|
-
|
|
17
12
|
export type TreeStructureType = 'navigation' | 'picker';
|
|
18
13
|
|
|
19
14
|
export type OnCreatedFunc = (folder: IFolder | undefined, parentId: string) => void;
|
|
@@ -35,14 +30,14 @@ export interface CommonTreeStructureProps {
|
|
|
35
30
|
}
|
|
36
31
|
|
|
37
32
|
export interface CommonFolderItemsProps extends CommonTreeStructureProps {
|
|
38
|
-
focusedFolder?:
|
|
33
|
+
focusedFolder?: IFolder;
|
|
39
34
|
level: number;
|
|
40
35
|
maxLevel: number;
|
|
41
|
-
selectedFolder?:
|
|
36
|
+
selectedFolder?: IFolder;
|
|
42
37
|
onCloseFolder: (id: string) => void;
|
|
43
38
|
onOpenFolder: (id: string) => void;
|
|
44
|
-
setFocusedFolder: (folder:
|
|
45
|
-
setSelectedFolder: (folder:
|
|
46
|
-
visibleFolders:
|
|
39
|
+
setFocusedFolder: (folder: IFolder) => void;
|
|
40
|
+
setSelectedFolder: (folder: IFolder) => void;
|
|
41
|
+
visibleFolders: IFolder[];
|
|
47
42
|
closeTree: () => void;
|
|
48
43
|
}
|
package/src/index.ts
CHANGED
|
@@ -251,7 +251,7 @@ export { SnackbarProvider, useSnack, BaseSnack, DefaultSnackbar } from './SnackB
|
|
|
251
251
|
export type { Snack, SnackContext } from './SnackBar';
|
|
252
252
|
export { InfoBlock } from './InfoBlock';
|
|
253
253
|
export { TreeStructure } from './TreeStructure';
|
|
254
|
-
export type {
|
|
254
|
+
export type { TreeStructureProps } from './TreeStructure';
|
|
255
255
|
|
|
256
256
|
export { SearchField, SearchResultList, SearchResultItem, ActiveFilters, ToggleSearchButton } from './Search';
|
|
257
257
|
export { default as LetterFilter } from './LetterFilter';
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
import _styled from "@emotion/styled/base";
|
|
2
|
-
function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
|
|
3
|
-
/**
|
|
4
|
-
* Copyright (c) 2022-present, NDLA.
|
|
5
|
-
*
|
|
6
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
7
|
-
* LICENSE file in the root directory of this source tree.
|
|
8
|
-
*
|
|
9
|
-
*/
|
|
10
|
-
|
|
11
|
-
import { colors, fonts, spacing } from '@ndla/core';
|
|
12
|
-
import React, { useEffect, useRef } from 'react';
|
|
13
|
-
import SafeLink from '@ndla/safelink';
|
|
14
|
-
import { arrowNavigation } from './arrowNavigation';
|
|
15
|
-
import { jsx as _jsx } from "@emotion/react/jsx-runtime";
|
|
16
|
-
import { jsxs as _jsxs } from "@emotion/react/jsx-runtime";
|
|
17
|
-
var StyledSafeLink = /*#__PURE__*/_styled(SafeLink, {
|
|
18
|
-
target: "et3arba1",
|
|
19
|
-
label: "StyledSafeLink"
|
|
20
|
-
})("display:grid;grid-template-columns:", spacing.medium, " 1fr;align-items:center;padding:", spacing.xxsmall, ";margin:", spacing.xsmall, " 0;gap:", spacing.xxsmall, ";box-shadow:none;color:", function (_ref) {
|
|
21
|
-
var selected = _ref.selected;
|
|
22
|
-
return selected ? colors.brand.primary : colors.text.primary;
|
|
23
|
-
}, ";font-weight:", function (_ref2) {
|
|
24
|
-
var selected = _ref2.selected;
|
|
25
|
-
return selected ? fonts.weight.semibold : fonts.weight.normal;
|
|
26
|
-
}, ";", fonts.sizes('16px'), ";:hover,:focus{color:", colors.brand.primary, ";}svg{height:26px;width:26px;}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk5hdmlnYXRpb25MaW5rLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQm9EIiwiZmlsZSI6Ik5hdmlnYXRpb25MaW5rLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyLXByZXNlbnQsIE5ETEEuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMdjMgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKi9cblxuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgY29sb3JzLCBmb250cywgc3BhY2luZyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuaW1wb3J0IFJlYWN0LCB7IEtleWJvYXJkRXZlbnQsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNhZmVMaW5rIGZyb20gJ0BuZGxhL3NhZmVsaW5rJztcbmltcG9ydCB7IGFycm93TmF2aWdhdGlvbiB9IGZyb20gJy4vYXJyb3dOYXZpZ2F0aW9uJztcbmltcG9ydCB7IENvbW1vbkZvbGRlckl0ZW1zUHJvcHMsIEZvbGRlclR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIFN0eWxlZFByb3BzIHtcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWRTYWZlTGluayA9IHN0eWxlZChTYWZlTGluayk8U3R5bGVkUHJvcHM+YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6ICR7c3BhY2luZy5tZWRpdW19IDFmcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBtYXJnaW46ICR7c3BhY2luZy54c21hbGx9IDA7XG4gIGdhcDogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBib3gtc2hhZG93OiBub25lO1xuXG4gIGNvbG9yOiAkeyh7IHNlbGVjdGVkIH0pID0+IChzZWxlY3RlZCA/IGNvbG9ycy5icmFuZC5wcmltYXJ5IDogY29sb3JzLnRleHQucHJpbWFyeSl9O1xuICBmb250LXdlaWdodDogJHsoeyBzZWxlY3RlZCB9KSA9PiAoc2VsZWN0ZWQgPyBmb250cy53ZWlnaHQuc2VtaWJvbGQgOiBmb250cy53ZWlnaHQubm9ybWFsKX07XG4gICR7Zm9udHMuc2l6ZXMoJzE2cHgnKX07XG5cbiAgOmhvdmVyLFxuICA6Zm9jdXMge1xuICAgIGNvbG9yOiAke2NvbG9ycy5icmFuZC5wcmltYXJ5fTtcbiAgfVxuICBzdmcge1xuICAgIGhlaWdodDogMjZweDtcbiAgICB3aWR0aDogMjZweDtcbiAgfVxuYDtcblxuY29uc3QgSWNvbldyYXBwZXIgPSBzdHlsZWQuc3BhbmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5gO1xuXG5pbnRlcmZhY2UgUHJvcHMgZXh0ZW5kcyBDb21tb25Gb2xkZXJJdGVtc1Byb3BzIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBmb2xkZXI6IEZvbGRlclR5cGU7XG59XG5cbmNvbnN0IE5hdmlnYXRpb25MaW5rID0gKHtcbiAgbG9hZGluZyxcbiAgZm9sZGVyLFxuICBzZWxlY3RlZEZvbGRlcixcbiAgZm9jdXNlZEZvbGRlcixcbiAgc2V0U2VsZWN0ZWRGb2xkZXIsXG4gIHNldEZvY3VzZWRGb2xkZXIsXG4gIHZpc2libGVGb2xkZXJzLFxuICBvbk9wZW5Gb2xkZXIsXG4gIG9uQ2xvc2VGb2xkZXIsXG59OiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGlkLCBpY29uLCBuYW1lIH0gPSBmb2xkZXI7XG4gIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0ZWRGb2xkZXIgJiYgc2VsZWN0ZWRGb2xkZXIuaWQgPT09IGlkO1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgJiBIVE1MQW5jaG9yRWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGZvY3VzZWQgPSBmb2N1c2VkRm9sZGVyPy5pZCA9PT0gaWQ7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgc2V0U2VsZWN0ZWRGb2xkZXIoZm9sZGVyKTtcbiAgICAgIHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNlZEZvbGRlcj8uaWQgPT09IGlkKSB7XG4gICAgICByZWYuY3VycmVudD8uZm9jdXMoKTtcbiAgICB9XG4gIH0sIFtmb2N1c2VkRm9sZGVyLCByZWYsIGlkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkU2FmZUxpbmtcbiAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICByZWY9e3JlZn1cbiAgICAgIG9uS2V5RG93bj17KGU6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgIHNldFNlbGVjdGVkRm9sZGVyKGZvbGRlcik7XG4gICAgICAgICAgc2V0Rm9jdXNlZEZvbGRlcihmb2xkZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhcnJvd05hdmlnYXRpb24oZSwgaWQsIHZpc2libGVGb2xkZXJzLCBzZXRGb2N1c2VkRm9sZGVyLCBvbk9wZW5Gb2xkZXIsIG9uQ2xvc2VGb2xkZXIpO1xuICAgICAgfX1cbiAgICAgIGFyaWEtY3VycmVudD17c2VsZWN0ZWQgPyAncGFnZScgOiB1bmRlZmluZWR9XG4gICAgICB0YWJJbmRleD17c2VsZWN0ZWQgfHwgZm9jdXNlZCA/IDAgOiAtMX1cbiAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgIG9uRm9jdXM9eygpID0+IHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgdG89e2xvYWRpbmcgPyAnJyA6IGAvbWlubmRsYS8ke2lkfWB9PlxuICAgICAgPEljb25XcmFwcGVyPntpY29ufTwvSWNvbldyYXBwZXI+XG4gICAgICB7bmFtZX1cbiAgICA8L1N0eWxlZFNhZmVMaW5rPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbkxpbms7XG4iXX0= */"));
|
|
27
|
-
var IconWrapper = /*#__PURE__*/_styled("span", {
|
|
28
|
-
target: "et3arba0",
|
|
29
|
-
label: "IconWrapper"
|
|
30
|
-
})(process.env.NODE_ENV === "production" ? {
|
|
31
|
-
name: "1wnowod",
|
|
32
|
-
styles: "display:flex;align-items:center;justify-content:center"
|
|
33
|
-
} : {
|
|
34
|
-
name: "1wnowod",
|
|
35
|
-
styles: "display:flex;align-items:center;justify-content:center",
|
|
36
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk5hdmlnYXRpb25MaW5rLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQytCIiwiZmlsZSI6Ik5hdmlnYXRpb25MaW5rLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyLXByZXNlbnQsIE5ETEEuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMdjMgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKi9cblxuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgY29sb3JzLCBmb250cywgc3BhY2luZyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuaW1wb3J0IFJlYWN0LCB7IEtleWJvYXJkRXZlbnQsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNhZmVMaW5rIGZyb20gJ0BuZGxhL3NhZmVsaW5rJztcbmltcG9ydCB7IGFycm93TmF2aWdhdGlvbiB9IGZyb20gJy4vYXJyb3dOYXZpZ2F0aW9uJztcbmltcG9ydCB7IENvbW1vbkZvbGRlckl0ZW1zUHJvcHMsIEZvbGRlclR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIFN0eWxlZFByb3BzIHtcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWRTYWZlTGluayA9IHN0eWxlZChTYWZlTGluayk8U3R5bGVkUHJvcHM+YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6ICR7c3BhY2luZy5tZWRpdW19IDFmcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBtYXJnaW46ICR7c3BhY2luZy54c21hbGx9IDA7XG4gIGdhcDogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBib3gtc2hhZG93OiBub25lO1xuXG4gIGNvbG9yOiAkeyh7IHNlbGVjdGVkIH0pID0+IChzZWxlY3RlZCA/IGNvbG9ycy5icmFuZC5wcmltYXJ5IDogY29sb3JzLnRleHQucHJpbWFyeSl9O1xuICBmb250LXdlaWdodDogJHsoeyBzZWxlY3RlZCB9KSA9PiAoc2VsZWN0ZWQgPyBmb250cy53ZWlnaHQuc2VtaWJvbGQgOiBmb250cy53ZWlnaHQubm9ybWFsKX07XG4gICR7Zm9udHMuc2l6ZXMoJzE2cHgnKX07XG5cbiAgOmhvdmVyLFxuICA6Zm9jdXMge1xuICAgIGNvbG9yOiAke2NvbG9ycy5icmFuZC5wcmltYXJ5fTtcbiAgfVxuICBzdmcge1xuICAgIGhlaWdodDogMjZweDtcbiAgICB3aWR0aDogMjZweDtcbiAgfVxuYDtcblxuY29uc3QgSWNvbldyYXBwZXIgPSBzdHlsZWQuc3BhbmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5gO1xuXG5pbnRlcmZhY2UgUHJvcHMgZXh0ZW5kcyBDb21tb25Gb2xkZXJJdGVtc1Byb3BzIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBmb2xkZXI6IEZvbGRlclR5cGU7XG59XG5cbmNvbnN0IE5hdmlnYXRpb25MaW5rID0gKHtcbiAgbG9hZGluZyxcbiAgZm9sZGVyLFxuICBzZWxlY3RlZEZvbGRlcixcbiAgZm9jdXNlZEZvbGRlcixcbiAgc2V0U2VsZWN0ZWRGb2xkZXIsXG4gIHNldEZvY3VzZWRGb2xkZXIsXG4gIHZpc2libGVGb2xkZXJzLFxuICBvbk9wZW5Gb2xkZXIsXG4gIG9uQ2xvc2VGb2xkZXIsXG59OiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGlkLCBpY29uLCBuYW1lIH0gPSBmb2xkZXI7XG4gIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0ZWRGb2xkZXIgJiYgc2VsZWN0ZWRGb2xkZXIuaWQgPT09IGlkO1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgJiBIVE1MQW5jaG9yRWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGZvY3VzZWQgPSBmb2N1c2VkRm9sZGVyPy5pZCA9PT0gaWQ7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgc2V0U2VsZWN0ZWRGb2xkZXIoZm9sZGVyKTtcbiAgICAgIHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNlZEZvbGRlcj8uaWQgPT09IGlkKSB7XG4gICAgICByZWYuY3VycmVudD8uZm9jdXMoKTtcbiAgICB9XG4gIH0sIFtmb2N1c2VkRm9sZGVyLCByZWYsIGlkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkU2FmZUxpbmtcbiAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICByZWY9e3JlZn1cbiAgICAgIG9uS2V5RG93bj17KGU6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgIHNldFNlbGVjdGVkRm9sZGVyKGZvbGRlcik7XG4gICAgICAgICAgc2V0Rm9jdXNlZEZvbGRlcihmb2xkZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhcnJvd05hdmlnYXRpb24oZSwgaWQsIHZpc2libGVGb2xkZXJzLCBzZXRGb2N1c2VkRm9sZGVyLCBvbk9wZW5Gb2xkZXIsIG9uQ2xvc2VGb2xkZXIpO1xuICAgICAgfX1cbiAgICAgIGFyaWEtY3VycmVudD17c2VsZWN0ZWQgPyAncGFnZScgOiB1bmRlZmluZWR9XG4gICAgICB0YWJJbmRleD17c2VsZWN0ZWQgfHwgZm9jdXNlZCA/IDAgOiAtMX1cbiAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgIG9uRm9jdXM9eygpID0+IHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgdG89e2xvYWRpbmcgPyAnJyA6IGAvbWlubmRsYS8ke2lkfWB9PlxuICAgICAgPEljb25XcmFwcGVyPntpY29ufTwvSWNvbldyYXBwZXI+XG4gICAgICB7bmFtZX1cbiAgICA8L1N0eWxlZFNhZmVMaW5rPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbkxpbms7XG4iXX0= */",
|
|
37
|
-
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
38
|
-
});
|
|
39
|
-
var NavigationLink = function NavigationLink(_ref3) {
|
|
40
|
-
var loading = _ref3.loading,
|
|
41
|
-
folder = _ref3.folder,
|
|
42
|
-
selectedFolder = _ref3.selectedFolder,
|
|
43
|
-
focusedFolder = _ref3.focusedFolder,
|
|
44
|
-
setSelectedFolder = _ref3.setSelectedFolder,
|
|
45
|
-
setFocusedFolder = _ref3.setFocusedFolder,
|
|
46
|
-
visibleFolders = _ref3.visibleFolders,
|
|
47
|
-
onOpenFolder = _ref3.onOpenFolder,
|
|
48
|
-
onCloseFolder = _ref3.onCloseFolder;
|
|
49
|
-
var id = folder.id,
|
|
50
|
-
icon = folder.icon,
|
|
51
|
-
name = folder.name;
|
|
52
|
-
var selected = selectedFolder && selectedFolder.id === id;
|
|
53
|
-
var ref = useRef(null);
|
|
54
|
-
var focused = (focusedFolder === null || focusedFolder === void 0 ? void 0 : focusedFolder.id) === id;
|
|
55
|
-
var handleClick = function handleClick() {
|
|
56
|
-
if (!selected) {
|
|
57
|
-
setSelectedFolder(folder);
|
|
58
|
-
setFocusedFolder(folder);
|
|
59
|
-
}
|
|
60
|
-
};
|
|
61
|
-
useEffect(function () {
|
|
62
|
-
if ((focusedFolder === null || focusedFolder === void 0 ? void 0 : focusedFolder.id) === id) {
|
|
63
|
-
var _ref$current;
|
|
64
|
-
(_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.focus();
|
|
65
|
-
}
|
|
66
|
-
}, [focusedFolder, ref, id]);
|
|
67
|
-
return _jsxs(StyledSafeLink, {
|
|
68
|
-
role: "treeitem",
|
|
69
|
-
ref: ref,
|
|
70
|
-
onKeyDown: function onKeyDown(e) {
|
|
71
|
-
if (e.key === 'Enter') {
|
|
72
|
-
setSelectedFolder(folder);
|
|
73
|
-
setFocusedFolder(folder);
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
|
-
arrowNavigation(e, id, visibleFolders, setFocusedFolder, onOpenFolder, onCloseFolder);
|
|
77
|
-
},
|
|
78
|
-
"aria-current": selected ? 'page' : undefined,
|
|
79
|
-
tabIndex: selected || focused ? 0 : -1,
|
|
80
|
-
selected: selected,
|
|
81
|
-
onFocus: function onFocus() {
|
|
82
|
-
return setFocusedFolder(folder);
|
|
83
|
-
},
|
|
84
|
-
onClick: handleClick,
|
|
85
|
-
to: loading ? '' : "/minndla/".concat(id),
|
|
86
|
-
children: [_jsx(IconWrapper, {
|
|
87
|
-
children: icon
|
|
88
|
-
}), name]
|
|
89
|
-
});
|
|
90
|
-
};
|
|
91
|
-
export default NavigationLink;
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2022-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
import { CommonFolderItemsProps, FolderType } from './types';
|
|
9
|
-
interface Props extends CommonFolderItemsProps {
|
|
10
|
-
isOpen: boolean;
|
|
11
|
-
folder: FolderType;
|
|
12
|
-
}
|
|
13
|
-
declare const NavigationLink: ({ loading, folder, selectedFolder, focusedFolder, setSelectedFolder, setFocusedFolder, visibleFolders, onOpenFolder, onCloseFolder, }: Props) => import("@emotion/react/jsx-runtime").JSX.Element;
|
|
14
|
-
export default NavigationLink;
|
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); }
|
|
4
|
-
Object.defineProperty(exports, "__esModule", {
|
|
5
|
-
value: true
|
|
6
|
-
});
|
|
7
|
-
exports["default"] = void 0;
|
|
8
|
-
var _base = _interopRequireDefault(require("@emotion/styled/base"));
|
|
9
|
-
var _core = require("@ndla/core");
|
|
10
|
-
var _react = _interopRequireWildcard(require("react"));
|
|
11
|
-
var _safelink = _interopRequireDefault(require("@ndla/safelink"));
|
|
12
|
-
var _arrowNavigation = require("./arrowNavigation");
|
|
13
|
-
var _jsxRuntime = require("@emotion/react/jsx-runtime");
|
|
14
|
-
function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); }
|
|
15
|
-
function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; }
|
|
16
|
-
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
|
|
17
|
-
function _EMOTION_STRINGIFIED_CSS_ERROR__() { return "You have tried to stringify object returned from `css` function. It isn't supposed to be used directly (e.g. as value of the `className` prop), but rather handed to emotion so it can handle it (e.g. as value of `css` prop)."; }
|
|
18
|
-
var StyledSafeLink = /*#__PURE__*/(0, _base["default"])(_safelink["default"], {
|
|
19
|
-
target: "et3arba1",
|
|
20
|
-
label: "StyledSafeLink"
|
|
21
|
-
})("display:grid;grid-template-columns:", _core.spacing.medium, " 1fr;align-items:center;padding:", _core.spacing.xxsmall, ";margin:", _core.spacing.xsmall, " 0;gap:", _core.spacing.xxsmall, ";box-shadow:none;color:", function (_ref) {
|
|
22
|
-
var selected = _ref.selected;
|
|
23
|
-
return selected ? _core.colors.brand.primary : _core.colors.text.primary;
|
|
24
|
-
}, ";font-weight:", function (_ref2) {
|
|
25
|
-
var selected = _ref2.selected;
|
|
26
|
-
return selected ? _core.fonts.weight.semibold : _core.fonts.weight.normal;
|
|
27
|
-
}, ";", _core.fonts.sizes('16px'), ";:hover,:focus{color:", _core.colors.brand.primary, ";}svg{height:26px;width:26px;}" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk5hdmlnYXRpb25MaW5rLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFtQm9EIiwiZmlsZSI6Ik5hdmlnYXRpb25MaW5rLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyLXByZXNlbnQsIE5ETEEuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMdjMgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKi9cblxuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgY29sb3JzLCBmb250cywgc3BhY2luZyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuaW1wb3J0IFJlYWN0LCB7IEtleWJvYXJkRXZlbnQsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNhZmVMaW5rIGZyb20gJ0BuZGxhL3NhZmVsaW5rJztcbmltcG9ydCB7IGFycm93TmF2aWdhdGlvbiB9IGZyb20gJy4vYXJyb3dOYXZpZ2F0aW9uJztcbmltcG9ydCB7IENvbW1vbkZvbGRlckl0ZW1zUHJvcHMsIEZvbGRlclR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIFN0eWxlZFByb3BzIHtcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWRTYWZlTGluayA9IHN0eWxlZChTYWZlTGluayk8U3R5bGVkUHJvcHM+YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6ICR7c3BhY2luZy5tZWRpdW19IDFmcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBtYXJnaW46ICR7c3BhY2luZy54c21hbGx9IDA7XG4gIGdhcDogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBib3gtc2hhZG93OiBub25lO1xuXG4gIGNvbG9yOiAkeyh7IHNlbGVjdGVkIH0pID0+IChzZWxlY3RlZCA/IGNvbG9ycy5icmFuZC5wcmltYXJ5IDogY29sb3JzLnRleHQucHJpbWFyeSl9O1xuICBmb250LXdlaWdodDogJHsoeyBzZWxlY3RlZCB9KSA9PiAoc2VsZWN0ZWQgPyBmb250cy53ZWlnaHQuc2VtaWJvbGQgOiBmb250cy53ZWlnaHQubm9ybWFsKX07XG4gICR7Zm9udHMuc2l6ZXMoJzE2cHgnKX07XG5cbiAgOmhvdmVyLFxuICA6Zm9jdXMge1xuICAgIGNvbG9yOiAke2NvbG9ycy5icmFuZC5wcmltYXJ5fTtcbiAgfVxuICBzdmcge1xuICAgIGhlaWdodDogMjZweDtcbiAgICB3aWR0aDogMjZweDtcbiAgfVxuYDtcblxuY29uc3QgSWNvbldyYXBwZXIgPSBzdHlsZWQuc3BhbmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5gO1xuXG5pbnRlcmZhY2UgUHJvcHMgZXh0ZW5kcyBDb21tb25Gb2xkZXJJdGVtc1Byb3BzIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBmb2xkZXI6IEZvbGRlclR5cGU7XG59XG5cbmNvbnN0IE5hdmlnYXRpb25MaW5rID0gKHtcbiAgbG9hZGluZyxcbiAgZm9sZGVyLFxuICBzZWxlY3RlZEZvbGRlcixcbiAgZm9jdXNlZEZvbGRlcixcbiAgc2V0U2VsZWN0ZWRGb2xkZXIsXG4gIHNldEZvY3VzZWRGb2xkZXIsXG4gIHZpc2libGVGb2xkZXJzLFxuICBvbk9wZW5Gb2xkZXIsXG4gIG9uQ2xvc2VGb2xkZXIsXG59OiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGlkLCBpY29uLCBuYW1lIH0gPSBmb2xkZXI7XG4gIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0ZWRGb2xkZXIgJiYgc2VsZWN0ZWRGb2xkZXIuaWQgPT09IGlkO1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgJiBIVE1MQW5jaG9yRWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGZvY3VzZWQgPSBmb2N1c2VkRm9sZGVyPy5pZCA9PT0gaWQ7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgc2V0U2VsZWN0ZWRGb2xkZXIoZm9sZGVyKTtcbiAgICAgIHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNlZEZvbGRlcj8uaWQgPT09IGlkKSB7XG4gICAgICByZWYuY3VycmVudD8uZm9jdXMoKTtcbiAgICB9XG4gIH0sIFtmb2N1c2VkRm9sZGVyLCByZWYsIGlkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkU2FmZUxpbmtcbiAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICByZWY9e3JlZn1cbiAgICAgIG9uS2V5RG93bj17KGU6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgIHNldFNlbGVjdGVkRm9sZGVyKGZvbGRlcik7XG4gICAgICAgICAgc2V0Rm9jdXNlZEZvbGRlcihmb2xkZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhcnJvd05hdmlnYXRpb24oZSwgaWQsIHZpc2libGVGb2xkZXJzLCBzZXRGb2N1c2VkRm9sZGVyLCBvbk9wZW5Gb2xkZXIsIG9uQ2xvc2VGb2xkZXIpO1xuICAgICAgfX1cbiAgICAgIGFyaWEtY3VycmVudD17c2VsZWN0ZWQgPyAncGFnZScgOiB1bmRlZmluZWR9XG4gICAgICB0YWJJbmRleD17c2VsZWN0ZWQgfHwgZm9jdXNlZCA/IDAgOiAtMX1cbiAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgIG9uRm9jdXM9eygpID0+IHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgdG89e2xvYWRpbmcgPyAnJyA6IGAvbWlubmRsYS8ke2lkfWB9PlxuICAgICAgPEljb25XcmFwcGVyPntpY29ufTwvSWNvbldyYXBwZXI+XG4gICAgICB7bmFtZX1cbiAgICA8L1N0eWxlZFNhZmVMaW5rPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbkxpbms7XG4iXX0= */"));
|
|
28
|
-
var IconWrapper = /*#__PURE__*/(0, _base["default"])("span", {
|
|
29
|
-
target: "et3arba0",
|
|
30
|
-
label: "IconWrapper"
|
|
31
|
-
})(process.env.NODE_ENV === "production" ? {
|
|
32
|
-
name: "1wnowod",
|
|
33
|
-
styles: "display:flex;align-items:center;justify-content:center"
|
|
34
|
-
} : {
|
|
35
|
-
name: "1wnowod",
|
|
36
|
-
styles: "display:flex;align-items:center;justify-content:center",
|
|
37
|
-
map: "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIk5hdmlnYXRpb25MaW5rLnRzeCJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUEwQytCIiwiZmlsZSI6Ik5hdmlnYXRpb25MaW5rLnRzeCIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29weXJpZ2h0IChjKSAyMDIyLXByZXNlbnQsIE5ETEEuXG4gKlxuICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgR1BMdjMgbGljZW5zZSBmb3VuZCBpbiB0aGVcbiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbiAqXG4gKi9cblxuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgY29sb3JzLCBmb250cywgc3BhY2luZyB9IGZyb20gJ0BuZGxhL2NvcmUnO1xuaW1wb3J0IFJlYWN0LCB7IEtleWJvYXJkRXZlbnQsIHVzZUVmZmVjdCwgdXNlUmVmIH0gZnJvbSAncmVhY3QnO1xuaW1wb3J0IFNhZmVMaW5rIGZyb20gJ0BuZGxhL3NhZmVsaW5rJztcbmltcG9ydCB7IGFycm93TmF2aWdhdGlvbiB9IGZyb20gJy4vYXJyb3dOYXZpZ2F0aW9uJztcbmltcG9ydCB7IENvbW1vbkZvbGRlckl0ZW1zUHJvcHMsIEZvbGRlclR5cGUgfSBmcm9tICcuL3R5cGVzJztcblxuaW50ZXJmYWNlIFN0eWxlZFByb3BzIHtcbiAgc2VsZWN0ZWQ/OiBib29sZWFuO1xufVxuXG5jb25zdCBTdHlsZWRTYWZlTGluayA9IHN0eWxlZChTYWZlTGluayk8U3R5bGVkUHJvcHM+YFxuICBkaXNwbGF5OiBncmlkO1xuICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6ICR7c3BhY2luZy5tZWRpdW19IDFmcjtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgcGFkZGluZzogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBtYXJnaW46ICR7c3BhY2luZy54c21hbGx9IDA7XG4gIGdhcDogJHtzcGFjaW5nLnh4c21hbGx9O1xuICBib3gtc2hhZG93OiBub25lO1xuXG4gIGNvbG9yOiAkeyh7IHNlbGVjdGVkIH0pID0+IChzZWxlY3RlZCA/IGNvbG9ycy5icmFuZC5wcmltYXJ5IDogY29sb3JzLnRleHQucHJpbWFyeSl9O1xuICBmb250LXdlaWdodDogJHsoeyBzZWxlY3RlZCB9KSA9PiAoc2VsZWN0ZWQgPyBmb250cy53ZWlnaHQuc2VtaWJvbGQgOiBmb250cy53ZWlnaHQubm9ybWFsKX07XG4gICR7Zm9udHMuc2l6ZXMoJzE2cHgnKX07XG5cbiAgOmhvdmVyLFxuICA6Zm9jdXMge1xuICAgIGNvbG9yOiAke2NvbG9ycy5icmFuZC5wcmltYXJ5fTtcbiAgfVxuICBzdmcge1xuICAgIGhlaWdodDogMjZweDtcbiAgICB3aWR0aDogMjZweDtcbiAgfVxuYDtcblxuY29uc3QgSWNvbldyYXBwZXIgPSBzdHlsZWQuc3BhbmBcbiAgZGlzcGxheTogZmxleDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG5gO1xuXG5pbnRlcmZhY2UgUHJvcHMgZXh0ZW5kcyBDb21tb25Gb2xkZXJJdGVtc1Byb3BzIHtcbiAgaXNPcGVuOiBib29sZWFuO1xuICBmb2xkZXI6IEZvbGRlclR5cGU7XG59XG5cbmNvbnN0IE5hdmlnYXRpb25MaW5rID0gKHtcbiAgbG9hZGluZyxcbiAgZm9sZGVyLFxuICBzZWxlY3RlZEZvbGRlcixcbiAgZm9jdXNlZEZvbGRlcixcbiAgc2V0U2VsZWN0ZWRGb2xkZXIsXG4gIHNldEZvY3VzZWRGb2xkZXIsXG4gIHZpc2libGVGb2xkZXJzLFxuICBvbk9wZW5Gb2xkZXIsXG4gIG9uQ2xvc2VGb2xkZXIsXG59OiBQcm9wcykgPT4ge1xuICBjb25zdCB7IGlkLCBpY29uLCBuYW1lIH0gPSBmb2xkZXI7XG4gIGNvbnN0IHNlbGVjdGVkID0gc2VsZWN0ZWRGb2xkZXIgJiYgc2VsZWN0ZWRGb2xkZXIuaWQgPT09IGlkO1xuICBjb25zdCByZWYgPSB1c2VSZWY8SFRNTEJ1dHRvbkVsZW1lbnQgJiBIVE1MQW5jaG9yRWxlbWVudD4obnVsbCk7XG4gIGNvbnN0IGZvY3VzZWQgPSBmb2N1c2VkRm9sZGVyPy5pZCA9PT0gaWQ7XG5cbiAgY29uc3QgaGFuZGxlQ2xpY2sgPSAoKSA9PiB7XG4gICAgaWYgKCFzZWxlY3RlZCkge1xuICAgICAgc2V0U2VsZWN0ZWRGb2xkZXIoZm9sZGVyKTtcbiAgICAgIHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKTtcbiAgICB9XG4gIH07XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoZm9jdXNlZEZvbGRlcj8uaWQgPT09IGlkKSB7XG4gICAgICByZWYuY3VycmVudD8uZm9jdXMoKTtcbiAgICB9XG4gIH0sIFtmb2N1c2VkRm9sZGVyLCByZWYsIGlkXSk7XG5cbiAgcmV0dXJuIChcbiAgICA8U3R5bGVkU2FmZUxpbmtcbiAgICAgIHJvbGU9XCJ0cmVlaXRlbVwiXG4gICAgICByZWY9e3JlZn1cbiAgICAgIG9uS2V5RG93bj17KGU6IEtleWJvYXJkRXZlbnQ8SFRNTEVsZW1lbnQ+KSA9PiB7XG4gICAgICAgIGlmIChlLmtleSA9PT0gJ0VudGVyJykge1xuICAgICAgICAgIHNldFNlbGVjdGVkRm9sZGVyKGZvbGRlcik7XG4gICAgICAgICAgc2V0Rm9jdXNlZEZvbGRlcihmb2xkZXIpO1xuICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBhcnJvd05hdmlnYXRpb24oZSwgaWQsIHZpc2libGVGb2xkZXJzLCBzZXRGb2N1c2VkRm9sZGVyLCBvbk9wZW5Gb2xkZXIsIG9uQ2xvc2VGb2xkZXIpO1xuICAgICAgfX1cbiAgICAgIGFyaWEtY3VycmVudD17c2VsZWN0ZWQgPyAncGFnZScgOiB1bmRlZmluZWR9XG4gICAgICB0YWJJbmRleD17c2VsZWN0ZWQgfHwgZm9jdXNlZCA/IDAgOiAtMX1cbiAgICAgIHNlbGVjdGVkPXtzZWxlY3RlZH1cbiAgICAgIG9uRm9jdXM9eygpID0+IHNldEZvY3VzZWRGb2xkZXIoZm9sZGVyKX1cbiAgICAgIG9uQ2xpY2s9e2hhbmRsZUNsaWNrfVxuICAgICAgdG89e2xvYWRpbmcgPyAnJyA6IGAvbWlubmRsYS8ke2lkfWB9PlxuICAgICAgPEljb25XcmFwcGVyPntpY29ufTwvSWNvbldyYXBwZXI+XG4gICAgICB7bmFtZX1cbiAgICA8L1N0eWxlZFNhZmVMaW5rPlxuICApO1xufTtcblxuZXhwb3J0IGRlZmF1bHQgTmF2aWdhdGlvbkxpbms7XG4iXX0= */",
|
|
38
|
-
toString: _EMOTION_STRINGIFIED_CSS_ERROR__
|
|
39
|
-
});
|
|
40
|
-
var NavigationLink = function NavigationLink(_ref3) {
|
|
41
|
-
var loading = _ref3.loading,
|
|
42
|
-
folder = _ref3.folder,
|
|
43
|
-
selectedFolder = _ref3.selectedFolder,
|
|
44
|
-
focusedFolder = _ref3.focusedFolder,
|
|
45
|
-
setSelectedFolder = _ref3.setSelectedFolder,
|
|
46
|
-
setFocusedFolder = _ref3.setFocusedFolder,
|
|
47
|
-
visibleFolders = _ref3.visibleFolders,
|
|
48
|
-
onOpenFolder = _ref3.onOpenFolder,
|
|
49
|
-
onCloseFolder = _ref3.onCloseFolder;
|
|
50
|
-
var id = folder.id,
|
|
51
|
-
icon = folder.icon,
|
|
52
|
-
name = folder.name;
|
|
53
|
-
var selected = selectedFolder && selectedFolder.id === id;
|
|
54
|
-
var ref = (0, _react.useRef)(null);
|
|
55
|
-
var focused = (focusedFolder === null || focusedFolder === void 0 ? void 0 : focusedFolder.id) === id;
|
|
56
|
-
var handleClick = function handleClick() {
|
|
57
|
-
if (!selected) {
|
|
58
|
-
setSelectedFolder(folder);
|
|
59
|
-
setFocusedFolder(folder);
|
|
60
|
-
}
|
|
61
|
-
};
|
|
62
|
-
(0, _react.useEffect)(function () {
|
|
63
|
-
if ((focusedFolder === null || focusedFolder === void 0 ? void 0 : focusedFolder.id) === id) {
|
|
64
|
-
var _ref$current;
|
|
65
|
-
(_ref$current = ref.current) === null || _ref$current === void 0 ? void 0 : _ref$current.focus();
|
|
66
|
-
}
|
|
67
|
-
}, [focusedFolder, ref, id]);
|
|
68
|
-
return (0, _jsxRuntime.jsxs)(StyledSafeLink, {
|
|
69
|
-
role: "treeitem",
|
|
70
|
-
ref: ref,
|
|
71
|
-
onKeyDown: function onKeyDown(e) {
|
|
72
|
-
if (e.key === 'Enter') {
|
|
73
|
-
setSelectedFolder(folder);
|
|
74
|
-
setFocusedFolder(folder);
|
|
75
|
-
return;
|
|
76
|
-
}
|
|
77
|
-
(0, _arrowNavigation.arrowNavigation)(e, id, visibleFolders, setFocusedFolder, onOpenFolder, onCloseFolder);
|
|
78
|
-
},
|
|
79
|
-
"aria-current": selected ? 'page' : undefined,
|
|
80
|
-
tabIndex: selected || focused ? 0 : -1,
|
|
81
|
-
selected: selected,
|
|
82
|
-
onFocus: function onFocus() {
|
|
83
|
-
return setFocusedFolder(folder);
|
|
84
|
-
},
|
|
85
|
-
onClick: handleClick,
|
|
86
|
-
to: loading ? '' : "/minndla/".concat(id),
|
|
87
|
-
children: [(0, _jsxRuntime.jsx)(IconWrapper, {
|
|
88
|
-
children: icon
|
|
89
|
-
}), name]
|
|
90
|
-
});
|
|
91
|
-
};
|
|
92
|
-
var _default = NavigationLink;
|
|
93
|
-
exports["default"] = _default;
|
|
@@ -1,107 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Copyright (c) 2022-present, NDLA.
|
|
3
|
-
*
|
|
4
|
-
* This source code is licensed under the GPLv3 license found in the
|
|
5
|
-
* LICENSE file in the root directory of this source tree.
|
|
6
|
-
*
|
|
7
|
-
*/
|
|
8
|
-
|
|
9
|
-
import styled from '@emotion/styled';
|
|
10
|
-
import { colors, fonts, spacing } from '@ndla/core';
|
|
11
|
-
import React, { KeyboardEvent, useEffect, useRef } from 'react';
|
|
12
|
-
import SafeLink from '@ndla/safelink';
|
|
13
|
-
import { arrowNavigation } from './arrowNavigation';
|
|
14
|
-
import { CommonFolderItemsProps, FolderType } from './types';
|
|
15
|
-
|
|
16
|
-
interface StyledProps {
|
|
17
|
-
selected?: boolean;
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
const StyledSafeLink = styled(SafeLink)<StyledProps>`
|
|
21
|
-
display: grid;
|
|
22
|
-
grid-template-columns: ${spacing.medium} 1fr;
|
|
23
|
-
align-items: center;
|
|
24
|
-
padding: ${spacing.xxsmall};
|
|
25
|
-
margin: ${spacing.xsmall} 0;
|
|
26
|
-
gap: ${spacing.xxsmall};
|
|
27
|
-
box-shadow: none;
|
|
28
|
-
|
|
29
|
-
color: ${({ selected }) => (selected ? colors.brand.primary : colors.text.primary)};
|
|
30
|
-
font-weight: ${({ selected }) => (selected ? fonts.weight.semibold : fonts.weight.normal)};
|
|
31
|
-
${fonts.sizes('16px')};
|
|
32
|
-
|
|
33
|
-
:hover,
|
|
34
|
-
:focus {
|
|
35
|
-
color: ${colors.brand.primary};
|
|
36
|
-
}
|
|
37
|
-
svg {
|
|
38
|
-
height: 26px;
|
|
39
|
-
width: 26px;
|
|
40
|
-
}
|
|
41
|
-
`;
|
|
42
|
-
|
|
43
|
-
const IconWrapper = styled.span`
|
|
44
|
-
display: flex;
|
|
45
|
-
align-items: center;
|
|
46
|
-
justify-content: center;
|
|
47
|
-
`;
|
|
48
|
-
|
|
49
|
-
interface Props extends CommonFolderItemsProps {
|
|
50
|
-
isOpen: boolean;
|
|
51
|
-
folder: FolderType;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const NavigationLink = ({
|
|
55
|
-
loading,
|
|
56
|
-
folder,
|
|
57
|
-
selectedFolder,
|
|
58
|
-
focusedFolder,
|
|
59
|
-
setSelectedFolder,
|
|
60
|
-
setFocusedFolder,
|
|
61
|
-
visibleFolders,
|
|
62
|
-
onOpenFolder,
|
|
63
|
-
onCloseFolder,
|
|
64
|
-
}: Props) => {
|
|
65
|
-
const { id, icon, name } = folder;
|
|
66
|
-
const selected = selectedFolder && selectedFolder.id === id;
|
|
67
|
-
const ref = useRef<HTMLButtonElement & HTMLAnchorElement>(null);
|
|
68
|
-
const focused = focusedFolder?.id === id;
|
|
69
|
-
|
|
70
|
-
const handleClick = () => {
|
|
71
|
-
if (!selected) {
|
|
72
|
-
setSelectedFolder(folder);
|
|
73
|
-
setFocusedFolder(folder);
|
|
74
|
-
}
|
|
75
|
-
};
|
|
76
|
-
|
|
77
|
-
useEffect(() => {
|
|
78
|
-
if (focusedFolder?.id === id) {
|
|
79
|
-
ref.current?.focus();
|
|
80
|
-
}
|
|
81
|
-
}, [focusedFolder, ref, id]);
|
|
82
|
-
|
|
83
|
-
return (
|
|
84
|
-
<StyledSafeLink
|
|
85
|
-
role="treeitem"
|
|
86
|
-
ref={ref}
|
|
87
|
-
onKeyDown={(e: KeyboardEvent<HTMLElement>) => {
|
|
88
|
-
if (e.key === 'Enter') {
|
|
89
|
-
setSelectedFolder(folder);
|
|
90
|
-
setFocusedFolder(folder);
|
|
91
|
-
return;
|
|
92
|
-
}
|
|
93
|
-
arrowNavigation(e, id, visibleFolders, setFocusedFolder, onOpenFolder, onCloseFolder);
|
|
94
|
-
}}
|
|
95
|
-
aria-current={selected ? 'page' : undefined}
|
|
96
|
-
tabIndex={selected || focused ? 0 : -1}
|
|
97
|
-
selected={selected}
|
|
98
|
-
onFocus={() => setFocusedFolder(folder)}
|
|
99
|
-
onClick={handleClick}
|
|
100
|
-
to={loading ? '' : `/minndla/${id}`}>
|
|
101
|
-
<IconWrapper>{icon}</IconWrapper>
|
|
102
|
-
{name}
|
|
103
|
-
</StyledSafeLink>
|
|
104
|
-
);
|
|
105
|
-
};
|
|
106
|
-
|
|
107
|
-
export default NavigationLink;
|