@ndla/ui 18.0.1 → 19.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/MyNdla/Resource/Folder.js +10 -9
- package/es/Resource/BlockResource.js +14 -8
- package/es/Resource/ListResource.js +15 -9
- package/es/Resource/resourceComponents.js +12 -11
- package/es/TreeStructure/FolderItems.js +7 -6
- package/es/TreeStructure/TreeStructure.js +16 -9
- package/es/locale/messages-en.js +1 -0
- package/es/locale/messages-nb.js +1 -0
- package/es/locale/messages-nn.js +1 -0
- package/es/locale/messages-se.js +1 -0
- package/es/locale/messages-sma.js +1 -0
- package/lib/MyNdla/Resource/Folder.d.ts +4 -3
- package/lib/MyNdla/Resource/Folder.js +10 -9
- package/lib/Resource/BlockResource.d.ts +4 -3
- package/lib/Resource/BlockResource.js +14 -7
- package/lib/Resource/ListResource.d.ts +4 -3
- package/lib/Resource/ListResource.js +15 -8
- package/lib/Resource/resourceComponents.d.ts +4 -1
- package/lib/Resource/resourceComponents.js +14 -13
- package/lib/TreeStructure/FolderItems.d.ts +1 -1
- package/lib/TreeStructure/FolderItems.js +7 -7
- package/lib/TreeStructure/TreeStructure.d.ts +6 -1
- package/lib/TreeStructure/TreeStructure.js +16 -9
- package/lib/TreeStructure/TreeStructure.types.d.ts +3 -1
- package/lib/locale/messages-en.d.ts +1 -0
- package/lib/locale/messages-en.js +1 -0
- package/lib/locale/messages-nb.d.ts +1 -0
- package/lib/locale/messages-nb.js +1 -0
- package/lib/locale/messages-nn.d.ts +1 -0
- package/lib/locale/messages-nn.js +1 -0
- package/lib/locale/messages-se.d.ts +1 -0
- package/lib/locale/messages-se.js +1 -0
- package/lib/locale/messages-sma.d.ts +1 -0
- package/lib/locale/messages-sma.js +1 -0
- package/package.json +5 -5
- package/src/MyNdla/Resource/Folder.tsx +5 -5
- package/src/Resource/BlockResource.tsx +7 -6
- package/src/Resource/ListResource.tsx +7 -6
- package/src/Resource/resourceComponents.tsx +5 -1
- package/src/TreeStructure/FolderItems.tsx +3 -2
- package/src/TreeStructure/TreeStructure.tsx +21 -7
- package/src/TreeStructure/TreeStructure.types.ts +3 -1
- package/src/locale/messages-en.ts +1 -0
- package/src/locale/messages-nb.ts +1 -0
- package/src/locale/messages-nn.ts +1 -0
- package/src/locale/messages-se.ts +1 -0
- package/src/locale/messages-sma.ts +1 -0
|
@@ -70,11 +70,11 @@ exports.MAX_LEVEL_FOR_FOLDERS = MAX_LEVEL_FOR_FOLDERS;
|
|
|
70
70
|
var StyledLabel = (0, _styledBase["default"])("label", {
|
|
71
71
|
target: "e1dg1gdn0",
|
|
72
72
|
label: "StyledLabel"
|
|
73
|
-
})("font-weight:", _core.fonts.weight.semibold, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
73
|
+
})("font-weight:", _core.fonts.weight.semibold, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVTdHJ1Y3R1cmUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQXdCZ0MiLCJmaWxlIjoiVHJlZVN0cnVjdHVyZS50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMi1wcmVzZW50LCBORExBLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTHYzIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlLCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnQG5kbGEvdXRpbCc7XG5pbXBvcnQgeyBBZGRCdXR0b24gfSBmcm9tICdAbmRsYS9idXR0b24nO1xuaW1wb3J0IFRvb2x0aXAgZnJvbSAnQG5kbGEvdG9vbHRpcCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgc3BhY2luZywgZm9udHMgfSBmcm9tICdAbmRsYS9jb3JlJztcbmltcG9ydCB7IHVuaXEgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFRyZWVTdHJ1Y3R1cmVTdHlsZWRXcmFwcGVyIGZyb20gJy4vVHJlZVN0cnVjdHVyZVdyYXBwZXInO1xuaW1wb3J0IEZvbGRlckl0ZW1zIGZyb20gJy4vRm9sZGVySXRlbXMnO1xuaW1wb3J0IHsgZ2V0SWRQYXRoc09mRm9sZGVyLCBnZXRQYXRoT2ZGb2xkZXIsIGdldEZvbGRlck5hbWUgfSBmcm9tICcuL2hlbHBlckZ1bmN0aW9ucyc7XG5pbXBvcnQga2V5Ym9hcmROYXZpZ2F0aW9uLCB7IEtFWUJPQVJEX0tFWVNfT0ZfSU5URVJFU1QgfSBmcm9tICcuL2tleWJvYXJkTmF2aWdhdGlvbi9rZXlib2FyZE5hdmlnYXRpb24nO1xuaW1wb3J0IHsgTmV3Rm9sZGVyUHJvcHMsIFRyZWVTdHJ1Y3R1cmVQcm9wcyB9IGZyb20gJy4vVHJlZVN0cnVjdHVyZS50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBNQVhfTEVWRUxfRk9SX0ZPTERFUlMgPSA0O1xuXG5jb25zdCBTdHlsZWRMYWJlbCA9IHN0eWxlZC5sYWJlbGBcbiAgZm9udC13ZWlnaHQ6ICR7Zm9udHMud2VpZ2h0LnNlbWlib2xkfTtcbmA7XG5cbmNvbnN0IEFkZEZvbGRlcldyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tdG9wOiAke3NwYWNpbmcueHNtYWxsfTtcbmA7XG5cbmNvbnN0IFRyZWVTdHJ1Y3R1cmUgPSAoe1xuICBkYXRhLFxuICBsYWJlbCxcbiAgZWRpdGFibGUsXG4gIGxvYWRpbmcsXG4gIG9uTmV3Rm9sZGVyLFxuICBvcGVuT25Gb2xkZXJDbGljayxcbiAgZnJhbWVkLFxuICBmb2xkZXJJZE1hcmtlZEJ5RGVmYXVsdCxcbiAgZGVmYXVsdE9wZW5Gb2xkZXJzLFxuICBmb2xkZXJDaGlsZCxcbiAgbWF4aW11bUxldmVsc09mRm9sZGVyc0FsbG93ZWQsXG59OiBUcmVlU3RydWN0dXJlUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBbbmV3Rm9sZGVyLCBzZXROZXdGb2xkZXJdID0gdXNlU3RhdGU8TmV3Rm9sZGVyUHJvcHMgfCB1bmRlZmluZWQ+KCk7XG4gIGNvbnN0IFtvcGVuRm9sZGVycywgc2V0T3BlbkZvbGRlcnNdID0gdXNlU3RhdGU8c3RyaW5nW10+KGRlZmF1bHRPcGVuRm9sZGVycyB8fCBbXSk7XG4gIGNvbnN0IFtmb2N1c2VkRm9sZGVySWQsIHNldEZvY3VzZWRGb2xkZXJJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIGNvbnN0IFttYXJrZWRGb2xkZXJJZCwgc2V0TWFya2VkRm9sZGVySWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPihmb2xkZXJJZE1hcmtlZEJ5RGVmYXVsdCB8fCBkYXRhWzBdPy5pZCk7XG4gIGNvbnN0IHRyZWVzdHJ1Y3R1cmVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB3cmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgcm9vdExldmVsSWQgPSB1c2VNZW1vKCgpID0+IHV1aWQoKSwgW10pOyAvLyBUT0RPOiB1c2UgdXNlSWQgaG9vayB3aGVuIHdlIHVwZGF0ZSB0byBSZWFjdCAxOFxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRlZmF1bHRPcGVuRm9sZGVycykge1xuICAgICAgc2V0T3BlbkZvbGRlcnMoKHByZXYpID0+IHtcbiAgICAgICAgcmV0dXJuIHVuaXEoWy4uLmRlZmF1bHRPcGVuRm9sZGVycywgLi4ucHJldl0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbZGVmYXVsdE9wZW5Gb2xkZXJzXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWxvYWRpbmcpIHtcbiAgICAgIHNldE5ld0ZvbGRlcih1bmRlZmluZWQpO1xuICAgIH1cbiAgfSwgW2xvYWRpbmddKTtcblxuICBjb25zdCBvblRvZ2dsZU9wZW4gPSAoaWQ6IHN0cmluZykgPT4ge1xuICAgIGlmIChvcGVuRm9sZGVycy5pbmNsdWRlcyhpZCkpIHtcbiAgICAgIC8vIERpZCB3ZSBqdXN0IGNsb3NlZCBhIGZvbGRlciB3aXRoIGEgbWFya2VkIGZvbGRlciBpbnNpZGUgaXQ/XG4gICAgICAvLyBJZiBzbywgd2UgbmVlZCB0byBtYXJrIHRoZSBmb2xkZXIgd2UganVzdCBjbG9zZWQuXG4gICAgICBpZiAobWFya2VkRm9sZGVySWQpIHtcbiAgICAgICAgY29uc3QgY2xvc2luZ0ZvbGRlclBhdGggPSBnZXRQYXRoT2ZGb2xkZXIoZGF0YSwgaWQpO1xuICAgICAgICBjb25zdCBtYXJrZWRGb2xkZXJQYXRoID0gZ2V0UGF0aE9mRm9sZGVyKGRhdGEsIG1hcmtlZEZvbGRlcklkKTtcbiAgICAgICAgY29uc3QgbWFya2VkRm9sZGVySXNTdWJQYXRoID0gY2xvc2luZ0ZvbGRlclBhdGguZXZlcnkoXG4gICAgICAgICAgKGZvbGRlcklkLCBfaW5kZXgpID0+IG1hcmtlZEZvbGRlclBhdGhbX2luZGV4XSA9PT0gZm9sZGVySWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtYXJrZWRGb2xkZXJJc1N1YlBhdGgpIHtcbiAgICAgICAgICBzZXRNYXJrZWRGb2xkZXJJZChjbG9zaW5nRm9sZGVyUGF0aFtjbG9zaW5nRm9sZGVyUGF0aC5sZW5ndGggLSAxXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldE9wZW5Gb2xkZXJzKG9wZW5Gb2xkZXJzLmZpbHRlcigoZm9sZGVyKSA9PiBmb2xkZXIgIT09IGlkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldE9wZW5Gb2xkZXJzKHVuaXEoWy4uLm9wZW5Gb2xkZXJzLCBpZF0pKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25DcmVhdGVOZXdGb2xkZXIgPSAocHJvcHM6IHsgaWRQYXRoczogbnVtYmVyW107IHBhcmVudElkPzogc3RyaW5nIH0pID0+IHtcbiAgICBzZXROZXdGb2xkZXIocHJvcHMpO1xuICB9O1xuXG4gIGNvbnN0IG9uU2F2ZU5ld0ZvbGRlciA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKG5ld0ZvbGRlcikge1xuICAgICAgLy8gV2Ugd291bGQgbGlrZSB0byBjcmVhdGUgYSBuZXcgZm9sZGVyIHdpdGggdGhlIG5hbWUgb2YgdmFsdWUuXG4gICAgICAvLyBJdHMgbG9jYXRpb24gaW4gc3RydWN0dXJlIGlzIGJhc2VkIG9uIG5ld0ZvbGRlciBvYmplY3RcbiAgICAgIG9uTmV3Rm9sZGVyKHsgLi4ubmV3Rm9sZGVyLCB2YWx1ZSB9KS50aGVuKChuZXdGb2xkZXJJZCkgPT4ge1xuICAgICAgICBpZiAobmV3Rm9sZGVySWQpIHtcbiAgICAgICAgICBzZXRNYXJrZWRGb2xkZXJJZChuZXdGb2xkZXJJZCk7XG4gICAgICAgICAgc2V0Rm9jdXNlZEZvbGRlcklkKG5ld0ZvbGRlcklkKTtcbiAgICAgICAgICAvLyBPcGVuIGN1cnJlbnQgZm9sZGVyIGluIGNhc2UgaXQgd2FzIGNsb3NlZC4uXG5cbiAgICAgICAgICBpZiAobmV3Rm9sZGVyLnBhcmVudElkKSB7XG4gICAgICAgICAgICBzZXRPcGVuRm9sZGVycyh1bmlxKFsuLi5vcGVuRm9sZGVycywgbmV3Rm9sZGVyLnBhcmVudElkXSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uQ2FuY2VsTmV3Rm9sZGVyID0gKCkgPT4ge1xuICAgIHNldE5ld0ZvbGRlcih1bmRlZmluZWQpO1xuICB9O1xuXG4gIGNvbnN0IG9uTWFya0ZvbGRlciA9IChpZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0TWFya2VkRm9sZGVySWQoaWQpO1xuICAgIHNldEZvY3VzZWRGb2xkZXJJZChpZCk7XG4gIH07XG5cbiAgY29uc3QgcGF0aHMgPSBnZXRQYXRoT2ZGb2xkZXIoZGF0YSwgbWFya2VkRm9sZGVySWQgfHwgJycpO1xuICBjb25zdCBjYW5BZGRGb2xkZXIgPSBlZGl0YWJsZSAmJiBwYXRocy5sZW5ndGggPCAobWF4aW11bUxldmVsc09mRm9sZGVyc0FsbG93ZWQgfHwgMSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3RyZWVzdHJ1Y3R1cmVSZWZ9XG4gICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgIGlmICh3cmFwcGVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpICYmIEtFWUJPQVJEX0tFWVNfT0ZfSU5URVJFU1QuaW5jbHVkZXMoZS5rZXkpKSB7XG4gICAgICAgICAga2V5Ym9hcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgIGUsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgc2V0Rm9jdXNlZEZvbGRlcklkLFxuICAgICAgICAgICAgZm9jdXNlZEZvbGRlcklkLFxuICAgICAgICAgICAgb25Ub2dnbGVPcGVuLFxuICAgICAgICAgICAgb3BlbkZvbGRlcnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH19PlxuICAgICAge2xhYmVsICYmIDxTdHlsZWRMYWJlbCBodG1sRm9yPXtyb290TGV2ZWxJZH0+e2xhYmVsfTwvU3R5bGVkTGFiZWw+fVxuICAgICAgPFRyZWVTdHJ1Y3R1cmVTdHlsZWRXcmFwcGVyIHJlZj17d3JhcHBlclJlZn0gaWQ9e3Jvb3RMZXZlbElkfSBhcmlhLWxhYmVsPVwiTWVudSB0cmVlXCIgcm9sZT1cInRyZWVcIiBmcmFtZWQ9e2ZyYW1lZH0+XG4gICAgICAgIDxGb2xkZXJJdGVtc1xuICAgICAgICAgIGlkUGF0aHM9e1tdfVxuICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgZWRpdGFibGU9e2VkaXRhYmxlfVxuICAgICAgICAgIG9uVG9nZ2xlT3Blbj17b25Ub2dnbGVPcGVufVxuICAgICAgICAgIG5ld0ZvbGRlcj17bmV3Rm9sZGVyfVxuICAgICAgICAgIG9uQ3JlYXRlTmV3Rm9sZGVyPXtvbkNyZWF0ZU5ld0ZvbGRlcn1cbiAgICAgICAgICBvbkNhbmNlbE5ld0ZvbGRlcj17b25DYW5jZWxOZXdGb2xkZXJ9XG4gICAgICAgICAgb25TYXZlTmV3Rm9sZGVyPXtvblNhdmVOZXdGb2xkZXJ9XG4gICAgICAgICAgb3BlbkZvbGRlcnM9e29wZW5Gb2xkZXJzfVxuICAgICAgICAgIG1hcmtlZEZvbGRlcklkPXttYXJrZWRGb2xkZXJJZH1cbiAgICAgICAgICBvbk1hcmtGb2xkZXI9e29uTWFya0ZvbGRlcn1cbiAgICAgICAgICBvcGVuT25Gb2xkZXJDbGljaz17b3Blbk9uRm9sZGVyQ2xpY2t9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBmb2N1c2VkRm9sZGVySWQ9e2ZvY3VzZWRGb2xkZXJJZH1cbiAgICAgICAgICBzZXRGb2N1c2VkRm9sZGVySWQ9e3NldEZvY3VzZWRGb2xkZXJJZH1cbiAgICAgICAgICBmaXJzdExldmVsXG4gICAgICAgICAgZm9sZGVyQ2hpbGQ9e2ZvbGRlckNoaWxkfVxuICAgICAgICAgIG1heGltdW1MZXZlbHNPZkZvbGRlcnNBbGxvd2VkPXttYXhpbXVtTGV2ZWxzT2ZGb2xkZXJzQWxsb3dlZH1cbiAgICAgICAgLz5cbiAgICAgIDwvVHJlZVN0cnVjdHVyZVN0eWxlZFdyYXBwZXI+XG4gICAgICB7ZWRpdGFibGUgJiYgKFxuICAgICAgICA8QWRkRm9sZGVyV3JhcHBlcj5cbiAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgdG9vbHRpcD17XG4gICAgICAgICAgICAgIGNhbkFkZEZvbGRlclxuICAgICAgICAgICAgICAgID8gdCgnbXlOZGxhLm5ld0ZvbGRlclVuZGVyJywge1xuICAgICAgICAgICAgICAgICAgICBmb2xkZXJOYW1lOiBnZXRGb2xkZXJOYW1lKGRhdGEsIG1hcmtlZEZvbGRlcklkKSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiB0KCdteU5kbGEubWF4Rm9sZGVyc0FscmVhZHlBZGRlZCcpXG4gICAgICAgICAgICB9PlxuICAgICAgICAgICAgPEFkZEJ1dHRvblxuICAgICAgICAgICAgICBkaXNhYmxlZD17IWNhbkFkZEZvbGRlcn1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnbXlOZGxhLm5ld0ZvbGRlcicpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWRQYXRocyA9IGdldElkUGF0aHNPZkZvbGRlcihkYXRhLCBtYXJrZWRGb2xkZXJJZCB8fCAnJyk7XG4gICAgICAgICAgICAgICAgc2V0TmV3Rm9sZGVyKHsgaWRQYXRocywgcGFyZW50SWQ6IHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdIH0pO1xuICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAge3QoJ215TmRsYS5uZXdGb2xkZXInKX1cbiAgICAgICAgICAgIDwvQWRkQnV0dG9uPlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgPC9BZGRGb2xkZXJXcmFwcGVyPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cblRyZWVTdHJ1Y3R1cmUuZGVmYXVsdFByb3BzID0ge1xuICBtYXhpbXVtTGV2ZWxzT2ZGb2xkZXJzQWxsb3dlZDogTUFYX0xFVkVMX0ZPUl9GT0xERVJTLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgVHJlZVN0cnVjdHVyZTtcbiJdfQ== */"));
|
|
74
74
|
var AddFolderWrapper = (0, _styledBase["default"])("div", {
|
|
75
75
|
target: "e1dg1gdn1",
|
|
76
76
|
label: "AddFolderWrapper"
|
|
77
|
-
})("display:flex;margin-top:", _core.spacing.xsmall, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,
|
|
77
|
+
})("display:flex;margin-top:", _core.spacing.xsmall, ";" + (process.env.NODE_ENV === "production" ? "" : "/*# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIlRyZWVTdHJ1Y3R1cmUudHN4Il0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQTRCbUMiLCJmaWxlIjoiVHJlZVN0cnVjdHVyZS50c3giLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIENvcHlyaWdodCAoYykgMjAyMi1wcmVzZW50LCBORExBLlxuICpcbiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIEdQTHYzIGxpY2Vuc2UgZm91bmQgaW4gdGhlXG4gKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG4gKlxuICovXG5cbmltcG9ydCBSZWFjdCwgeyB1c2VFZmZlY3QsIHVzZVN0YXRlLCB1c2VSZWYsIHVzZU1lbW8gfSBmcm9tICdyZWFjdCc7XG5pbXBvcnQgeyB1dWlkIH0gZnJvbSAnQG5kbGEvdXRpbCc7XG5pbXBvcnQgeyBBZGRCdXR0b24gfSBmcm9tICdAbmRsYS9idXR0b24nO1xuaW1wb3J0IFRvb2x0aXAgZnJvbSAnQG5kbGEvdG9vbHRpcCc7XG5pbXBvcnQgeyB1c2VUcmFuc2xhdGlvbiB9IGZyb20gJ3JlYWN0LWkxOG5leHQnO1xuaW1wb3J0IHN0eWxlZCBmcm9tICdAZW1vdGlvbi9zdHlsZWQnO1xuaW1wb3J0IHsgc3BhY2luZywgZm9udHMgfSBmcm9tICdAbmRsYS9jb3JlJztcbmltcG9ydCB7IHVuaXEgfSBmcm9tICdsb2Rhc2gnO1xuaW1wb3J0IFRyZWVTdHJ1Y3R1cmVTdHlsZWRXcmFwcGVyIGZyb20gJy4vVHJlZVN0cnVjdHVyZVdyYXBwZXInO1xuaW1wb3J0IEZvbGRlckl0ZW1zIGZyb20gJy4vRm9sZGVySXRlbXMnO1xuaW1wb3J0IHsgZ2V0SWRQYXRoc09mRm9sZGVyLCBnZXRQYXRoT2ZGb2xkZXIsIGdldEZvbGRlck5hbWUgfSBmcm9tICcuL2hlbHBlckZ1bmN0aW9ucyc7XG5pbXBvcnQga2V5Ym9hcmROYXZpZ2F0aW9uLCB7IEtFWUJPQVJEX0tFWVNfT0ZfSU5URVJFU1QgfSBmcm9tICcuL2tleWJvYXJkTmF2aWdhdGlvbi9rZXlib2FyZE5hdmlnYXRpb24nO1xuaW1wb3J0IHsgTmV3Rm9sZGVyUHJvcHMsIFRyZWVTdHJ1Y3R1cmVQcm9wcyB9IGZyb20gJy4vVHJlZVN0cnVjdHVyZS50eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBNQVhfTEVWRUxfRk9SX0ZPTERFUlMgPSA0O1xuXG5jb25zdCBTdHlsZWRMYWJlbCA9IHN0eWxlZC5sYWJlbGBcbiAgZm9udC13ZWlnaHQ6ICR7Zm9udHMud2VpZ2h0LnNlbWlib2xkfTtcbmA7XG5cbmNvbnN0IEFkZEZvbGRlcldyYXBwZXIgPSBzdHlsZWQuZGl2YFxuICBkaXNwbGF5OiBmbGV4O1xuICBtYXJnaW4tdG9wOiAke3NwYWNpbmcueHNtYWxsfTtcbmA7XG5cbmNvbnN0IFRyZWVTdHJ1Y3R1cmUgPSAoe1xuICBkYXRhLFxuICBsYWJlbCxcbiAgZWRpdGFibGUsXG4gIGxvYWRpbmcsXG4gIG9uTmV3Rm9sZGVyLFxuICBvcGVuT25Gb2xkZXJDbGljayxcbiAgZnJhbWVkLFxuICBmb2xkZXJJZE1hcmtlZEJ5RGVmYXVsdCxcbiAgZGVmYXVsdE9wZW5Gb2xkZXJzLFxuICBmb2xkZXJDaGlsZCxcbiAgbWF4aW11bUxldmVsc09mRm9sZGVyc0FsbG93ZWQsXG59OiBUcmVlU3RydWN0dXJlUHJvcHMpID0+IHtcbiAgY29uc3QgeyB0IH0gPSB1c2VUcmFuc2xhdGlvbigpO1xuICBjb25zdCBbbmV3Rm9sZGVyLCBzZXROZXdGb2xkZXJdID0gdXNlU3RhdGU8TmV3Rm9sZGVyUHJvcHMgfCB1bmRlZmluZWQ+KCk7XG4gIGNvbnN0IFtvcGVuRm9sZGVycywgc2V0T3BlbkZvbGRlcnNdID0gdXNlU3RhdGU8c3RyaW5nW10+KGRlZmF1bHRPcGVuRm9sZGVycyB8fCBbXSk7XG4gIGNvbnN0IFtmb2N1c2VkRm9sZGVySWQsIHNldEZvY3VzZWRGb2xkZXJJZF0gPSB1c2VTdGF0ZTxzdHJpbmcgfCB1bmRlZmluZWQ+KCk7XG4gIGNvbnN0IFttYXJrZWRGb2xkZXJJZCwgc2V0TWFya2VkRm9sZGVySWRdID0gdXNlU3RhdGU8c3RyaW5nIHwgdW5kZWZpbmVkPihmb2xkZXJJZE1hcmtlZEJ5RGVmYXVsdCB8fCBkYXRhWzBdPy5pZCk7XG4gIGNvbnN0IHRyZWVzdHJ1Y3R1cmVSZWYgPSB1c2VSZWY8SFRNTERpdkVsZW1lbnQ+KG51bGwpO1xuICBjb25zdCB3cmFwcGVyUmVmID0gdXNlUmVmPEhUTUxEaXZFbGVtZW50PihudWxsKTtcbiAgY29uc3Qgcm9vdExldmVsSWQgPSB1c2VNZW1vKCgpID0+IHV1aWQoKSwgW10pOyAvLyBUT0RPOiB1c2UgdXNlSWQgaG9vayB3aGVuIHdlIHVwZGF0ZSB0byBSZWFjdCAxOFxuXG4gIHVzZUVmZmVjdCgoKSA9PiB7XG4gICAgaWYgKGRlZmF1bHRPcGVuRm9sZGVycykge1xuICAgICAgc2V0T3BlbkZvbGRlcnMoKHByZXYpID0+IHtcbiAgICAgICAgcmV0dXJuIHVuaXEoWy4uLmRlZmF1bHRPcGVuRm9sZGVycywgLi4ucHJldl0pO1xuICAgICAgfSk7XG4gICAgfVxuICB9LCBbZGVmYXVsdE9wZW5Gb2xkZXJzXSk7XG5cbiAgdXNlRWZmZWN0KCgpID0+IHtcbiAgICBpZiAoIWxvYWRpbmcpIHtcbiAgICAgIHNldE5ld0ZvbGRlcih1bmRlZmluZWQpO1xuICAgIH1cbiAgfSwgW2xvYWRpbmddKTtcblxuICBjb25zdCBvblRvZ2dsZU9wZW4gPSAoaWQ6IHN0cmluZykgPT4ge1xuICAgIGlmIChvcGVuRm9sZGVycy5pbmNsdWRlcyhpZCkpIHtcbiAgICAgIC8vIERpZCB3ZSBqdXN0IGNsb3NlZCBhIGZvbGRlciB3aXRoIGEgbWFya2VkIGZvbGRlciBpbnNpZGUgaXQ/XG4gICAgICAvLyBJZiBzbywgd2UgbmVlZCB0byBtYXJrIHRoZSBmb2xkZXIgd2UganVzdCBjbG9zZWQuXG4gICAgICBpZiAobWFya2VkRm9sZGVySWQpIHtcbiAgICAgICAgY29uc3QgY2xvc2luZ0ZvbGRlclBhdGggPSBnZXRQYXRoT2ZGb2xkZXIoZGF0YSwgaWQpO1xuICAgICAgICBjb25zdCBtYXJrZWRGb2xkZXJQYXRoID0gZ2V0UGF0aE9mRm9sZGVyKGRhdGEsIG1hcmtlZEZvbGRlcklkKTtcbiAgICAgICAgY29uc3QgbWFya2VkRm9sZGVySXNTdWJQYXRoID0gY2xvc2luZ0ZvbGRlclBhdGguZXZlcnkoXG4gICAgICAgICAgKGZvbGRlcklkLCBfaW5kZXgpID0+IG1hcmtlZEZvbGRlclBhdGhbX2luZGV4XSA9PT0gZm9sZGVySWQsXG4gICAgICAgICk7XG4gICAgICAgIGlmIChtYXJrZWRGb2xkZXJJc1N1YlBhdGgpIHtcbiAgICAgICAgICBzZXRNYXJrZWRGb2xkZXJJZChjbG9zaW5nRm9sZGVyUGF0aFtjbG9zaW5nRm9sZGVyUGF0aC5sZW5ndGggLSAxXSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHNldE9wZW5Gb2xkZXJzKG9wZW5Gb2xkZXJzLmZpbHRlcigoZm9sZGVyKSA9PiBmb2xkZXIgIT09IGlkKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHNldE9wZW5Gb2xkZXJzKHVuaXEoWy4uLm9wZW5Gb2xkZXJzLCBpZF0pKTtcbiAgICB9XG4gIH07XG5cbiAgY29uc3Qgb25DcmVhdGVOZXdGb2xkZXIgPSAocHJvcHM6IHsgaWRQYXRoczogbnVtYmVyW107IHBhcmVudElkPzogc3RyaW5nIH0pID0+IHtcbiAgICBzZXROZXdGb2xkZXIocHJvcHMpO1xuICB9O1xuXG4gIGNvbnN0IG9uU2F2ZU5ld0ZvbGRlciA9ICh2YWx1ZTogc3RyaW5nKSA9PiB7XG4gICAgaWYgKG5ld0ZvbGRlcikge1xuICAgICAgLy8gV2Ugd291bGQgbGlrZSB0byBjcmVhdGUgYSBuZXcgZm9sZGVyIHdpdGggdGhlIG5hbWUgb2YgdmFsdWUuXG4gICAgICAvLyBJdHMgbG9jYXRpb24gaW4gc3RydWN0dXJlIGlzIGJhc2VkIG9uIG5ld0ZvbGRlciBvYmplY3RcbiAgICAgIG9uTmV3Rm9sZGVyKHsgLi4ubmV3Rm9sZGVyLCB2YWx1ZSB9KS50aGVuKChuZXdGb2xkZXJJZCkgPT4ge1xuICAgICAgICBpZiAobmV3Rm9sZGVySWQpIHtcbiAgICAgICAgICBzZXRNYXJrZWRGb2xkZXJJZChuZXdGb2xkZXJJZCk7XG4gICAgICAgICAgc2V0Rm9jdXNlZEZvbGRlcklkKG5ld0ZvbGRlcklkKTtcbiAgICAgICAgICAvLyBPcGVuIGN1cnJlbnQgZm9sZGVyIGluIGNhc2UgaXQgd2FzIGNsb3NlZC4uXG5cbiAgICAgICAgICBpZiAobmV3Rm9sZGVyLnBhcmVudElkKSB7XG4gICAgICAgICAgICBzZXRPcGVuRm9sZGVycyh1bmlxKFsuLi5vcGVuRm9sZGVycywgbmV3Rm9sZGVyLnBhcmVudElkXSkpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfSk7XG4gICAgfVxuICB9O1xuXG4gIGNvbnN0IG9uQ2FuY2VsTmV3Rm9sZGVyID0gKCkgPT4ge1xuICAgIHNldE5ld0ZvbGRlcih1bmRlZmluZWQpO1xuICB9O1xuXG4gIGNvbnN0IG9uTWFya0ZvbGRlciA9IChpZDogc3RyaW5nKSA9PiB7XG4gICAgc2V0TWFya2VkRm9sZGVySWQoaWQpO1xuICAgIHNldEZvY3VzZWRGb2xkZXJJZChpZCk7XG4gIH07XG5cbiAgY29uc3QgcGF0aHMgPSBnZXRQYXRoT2ZGb2xkZXIoZGF0YSwgbWFya2VkRm9sZGVySWQgfHwgJycpO1xuICBjb25zdCBjYW5BZGRGb2xkZXIgPSBlZGl0YWJsZSAmJiBwYXRocy5sZW5ndGggPCAobWF4aW11bUxldmVsc09mRm9sZGVyc0FsbG93ZWQgfHwgMSk7XG5cbiAgcmV0dXJuIChcbiAgICA8ZGl2XG4gICAgICByZWY9e3RyZWVzdHJ1Y3R1cmVSZWZ9XG4gICAgICBvbktleURvd249eyhlKSA9PiB7XG4gICAgICAgIGlmICh3cmFwcGVyUmVmLmN1cnJlbnQ/LmNvbnRhaW5zKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpICYmIEtFWUJPQVJEX0tFWVNfT0ZfSU5URVJFU1QuaW5jbHVkZXMoZS5rZXkpKSB7XG4gICAgICAgICAga2V5Ym9hcmROYXZpZ2F0aW9uKHtcbiAgICAgICAgICAgIGUsXG4gICAgICAgICAgICBkYXRhLFxuICAgICAgICAgICAgc2V0Rm9jdXNlZEZvbGRlcklkLFxuICAgICAgICAgICAgZm9jdXNlZEZvbGRlcklkLFxuICAgICAgICAgICAgb25Ub2dnbGVPcGVuLFxuICAgICAgICAgICAgb3BlbkZvbGRlcnMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH19PlxuICAgICAge2xhYmVsICYmIDxTdHlsZWRMYWJlbCBodG1sRm9yPXtyb290TGV2ZWxJZH0+e2xhYmVsfTwvU3R5bGVkTGFiZWw+fVxuICAgICAgPFRyZWVTdHJ1Y3R1cmVTdHlsZWRXcmFwcGVyIHJlZj17d3JhcHBlclJlZn0gaWQ9e3Jvb3RMZXZlbElkfSBhcmlhLWxhYmVsPVwiTWVudSB0cmVlXCIgcm9sZT1cInRyZWVcIiBmcmFtZWQ9e2ZyYW1lZH0+XG4gICAgICAgIDxGb2xkZXJJdGVtc1xuICAgICAgICAgIGlkUGF0aHM9e1tdfVxuICAgICAgICAgIGRhdGE9e2RhdGF9XG4gICAgICAgICAgZWRpdGFibGU9e2VkaXRhYmxlfVxuICAgICAgICAgIG9uVG9nZ2xlT3Blbj17b25Ub2dnbGVPcGVufVxuICAgICAgICAgIG5ld0ZvbGRlcj17bmV3Rm9sZGVyfVxuICAgICAgICAgIG9uQ3JlYXRlTmV3Rm9sZGVyPXtvbkNyZWF0ZU5ld0ZvbGRlcn1cbiAgICAgICAgICBvbkNhbmNlbE5ld0ZvbGRlcj17b25DYW5jZWxOZXdGb2xkZXJ9XG4gICAgICAgICAgb25TYXZlTmV3Rm9sZGVyPXtvblNhdmVOZXdGb2xkZXJ9XG4gICAgICAgICAgb3BlbkZvbGRlcnM9e29wZW5Gb2xkZXJzfVxuICAgICAgICAgIG1hcmtlZEZvbGRlcklkPXttYXJrZWRGb2xkZXJJZH1cbiAgICAgICAgICBvbk1hcmtGb2xkZXI9e29uTWFya0ZvbGRlcn1cbiAgICAgICAgICBvcGVuT25Gb2xkZXJDbGljaz17b3Blbk9uRm9sZGVyQ2xpY2t9XG4gICAgICAgICAgbG9hZGluZz17bG9hZGluZ31cbiAgICAgICAgICBmb2N1c2VkRm9sZGVySWQ9e2ZvY3VzZWRGb2xkZXJJZH1cbiAgICAgICAgICBzZXRGb2N1c2VkRm9sZGVySWQ9e3NldEZvY3VzZWRGb2xkZXJJZH1cbiAgICAgICAgICBmaXJzdExldmVsXG4gICAgICAgICAgZm9sZGVyQ2hpbGQ9e2ZvbGRlckNoaWxkfVxuICAgICAgICAgIG1heGltdW1MZXZlbHNPZkZvbGRlcnNBbGxvd2VkPXttYXhpbXVtTGV2ZWxzT2ZGb2xkZXJzQWxsb3dlZH1cbiAgICAgICAgLz5cbiAgICAgIDwvVHJlZVN0cnVjdHVyZVN0eWxlZFdyYXBwZXI+XG4gICAgICB7ZWRpdGFibGUgJiYgKFxuICAgICAgICA8QWRkRm9sZGVyV3JhcHBlcj5cbiAgICAgICAgICA8VG9vbHRpcFxuICAgICAgICAgICAgdG9vbHRpcD17XG4gICAgICAgICAgICAgIGNhbkFkZEZvbGRlclxuICAgICAgICAgICAgICAgID8gdCgnbXlOZGxhLm5ld0ZvbGRlclVuZGVyJywge1xuICAgICAgICAgICAgICAgICAgICBmb2xkZXJOYW1lOiBnZXRGb2xkZXJOYW1lKGRhdGEsIG1hcmtlZEZvbGRlcklkKSxcbiAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgOiB0KCdteU5kbGEubWF4Rm9sZGVyc0FscmVhZHlBZGRlZCcpXG4gICAgICAgICAgICB9PlxuICAgICAgICAgICAgPEFkZEJ1dHRvblxuICAgICAgICAgICAgICBkaXNhYmxlZD17IWNhbkFkZEZvbGRlcn1cbiAgICAgICAgICAgICAgYXJpYS1sYWJlbD17dCgnbXlOZGxhLm5ld0ZvbGRlcicpfVxuICAgICAgICAgICAgICBvbkNsaWNrPXsoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgaWRQYXRocyA9IGdldElkUGF0aHNPZkZvbGRlcihkYXRhLCBtYXJrZWRGb2xkZXJJZCB8fCAnJyk7XG4gICAgICAgICAgICAgICAgc2V0TmV3Rm9sZGVyKHsgaWRQYXRocywgcGFyZW50SWQ6IHBhdGhzW3BhdGhzLmxlbmd0aCAtIDFdIH0pO1xuICAgICAgICAgICAgICB9fT5cbiAgICAgICAgICAgICAge3QoJ215TmRsYS5uZXdGb2xkZXInKX1cbiAgICAgICAgICAgIDwvQWRkQnV0dG9uPlxuICAgICAgICAgIDwvVG9vbHRpcD5cbiAgICAgICAgPC9BZGRGb2xkZXJXcmFwcGVyPlxuICAgICAgKX1cbiAgICA8L2Rpdj5cbiAgKTtcbn07XG5cblRyZWVTdHJ1Y3R1cmUuZGVmYXVsdFByb3BzID0ge1xuICBtYXhpbXVtTGV2ZWxzT2ZGb2xkZXJzQWxsb3dlZDogTUFYX0xFVkVMX0ZPUl9GT0xERVJTLFxufTtcblxuZXhwb3J0IGRlZmF1bHQgVHJlZVN0cnVjdHVyZTtcbiJdfQ== */"));
|
|
78
78
|
|
|
79
79
|
var TreeStructure = function TreeStructure(_ref) {
|
|
80
80
|
var _data$;
|
|
@@ -88,7 +88,8 @@ var TreeStructure = function TreeStructure(_ref) {
|
|
|
88
88
|
framed = _ref.framed,
|
|
89
89
|
folderIdMarkedByDefault = _ref.folderIdMarkedByDefault,
|
|
90
90
|
defaultOpenFolders = _ref.defaultOpenFolders,
|
|
91
|
-
folderChild = _ref.folderChild
|
|
91
|
+
folderChild = _ref.folderChild,
|
|
92
|
+
maximumLevelsOfFoldersAllowed = _ref.maximumLevelsOfFoldersAllowed;
|
|
92
93
|
|
|
93
94
|
var _useTranslation = (0, _reactI18next.useTranslation)(),
|
|
94
95
|
t = _useTranslation.t;
|
|
@@ -188,6 +189,8 @@ var TreeStructure = function TreeStructure(_ref) {
|
|
|
188
189
|
setFocusedFolderId(id);
|
|
189
190
|
};
|
|
190
191
|
|
|
192
|
+
var paths = (0, _helperFunctions.getPathOfFolder)(data, markedFolderId || '');
|
|
193
|
+
var canAddFolder = editable && paths.length < (maximumLevelsOfFoldersAllowed || 1);
|
|
191
194
|
return (0, _core2.jsx)("div", {
|
|
192
195
|
ref: treestructureRef,
|
|
193
196
|
onKeyDown: function onKeyDown(e) {
|
|
@@ -204,7 +207,7 @@ var TreeStructure = function TreeStructure(_ref) {
|
|
|
204
207
|
});
|
|
205
208
|
}
|
|
206
209
|
}
|
|
207
|
-
}, (0, _core2.jsx)(StyledLabel, {
|
|
210
|
+
}, label && (0, _core2.jsx)(StyledLabel, {
|
|
208
211
|
htmlFor: rootLevelId
|
|
209
212
|
}, label), (0, _core2.jsx)(_TreeStructureWrapper["default"], {
|
|
210
213
|
ref: wrapperRef,
|
|
@@ -229,23 +232,27 @@ var TreeStructure = function TreeStructure(_ref) {
|
|
|
229
232
|
focusedFolderId: focusedFolderId,
|
|
230
233
|
setFocusedFolderId: setFocusedFolderId,
|
|
231
234
|
firstLevel: true,
|
|
232
|
-
folderChild: folderChild
|
|
235
|
+
folderChild: folderChild,
|
|
236
|
+
maximumLevelsOfFoldersAllowed: maximumLevelsOfFoldersAllowed
|
|
233
237
|
})), editable && (0, _core2.jsx)(AddFolderWrapper, null, (0, _core2.jsx)(_tooltip["default"], {
|
|
234
|
-
tooltip: t('myNdla.newFolderUnder', {
|
|
238
|
+
tooltip: canAddFolder ? t('myNdla.newFolderUnder', {
|
|
235
239
|
folderName: (0, _helperFunctions.getFolderName)(data, markedFolderId)
|
|
236
|
-
})
|
|
240
|
+
}) : t('myNdla.maxFoldersAlreadyAdded')
|
|
237
241
|
}, (0, _core2.jsx)(_button.AddButton, {
|
|
242
|
+
disabled: !canAddFolder,
|
|
238
243
|
"aria-label": t('myNdla.newFolder'),
|
|
239
244
|
onClick: function onClick() {
|
|
240
|
-
var paths = (0, _helperFunctions.getPathOfFolder)(data, markedFolderId || '');
|
|
241
245
|
var idPaths = (0, _helperFunctions.getIdPathsOfFolder)(data, markedFolderId || '');
|
|
242
246
|
setNewFolder({
|
|
243
247
|
idPaths: idPaths,
|
|
244
248
|
parentId: paths[paths.length - 1]
|
|
245
249
|
});
|
|
246
250
|
}
|
|
247
|
-
}))));
|
|
251
|
+
}, t('myNdla.newFolder')))));
|
|
248
252
|
};
|
|
249
253
|
|
|
254
|
+
TreeStructure.defaultProps = {
|
|
255
|
+
maximumLevelsOfFoldersAllowed: MAX_LEVEL_FOR_FOLDERS
|
|
256
|
+
};
|
|
250
257
|
var _default = TreeStructure;
|
|
251
258
|
exports["default"] = _default;
|
|
@@ -29,7 +29,7 @@ interface CommonFolderProps {
|
|
|
29
29
|
}
|
|
30
30
|
export interface TreeStructureProps extends CommonFolderProps {
|
|
31
31
|
framed?: boolean;
|
|
32
|
-
label
|
|
32
|
+
label?: string;
|
|
33
33
|
folderIdMarkedByDefault?: string;
|
|
34
34
|
onNewFolder: (props: {
|
|
35
35
|
value: string;
|
|
@@ -38,6 +38,7 @@ export interface TreeStructureProps extends CommonFolderProps {
|
|
|
38
38
|
}) => Promise<string>;
|
|
39
39
|
defaultOpenFolders?: string[];
|
|
40
40
|
folderChild?: FolderChildFuncType;
|
|
41
|
+
maximumLevelsOfFoldersAllowed: number;
|
|
41
42
|
}
|
|
42
43
|
export declare type onCreateNewFolderProp = ({ idPaths, parentId, }: {
|
|
43
44
|
idPaths: number[];
|
|
@@ -62,5 +63,6 @@ export interface FolderItemsProps extends CommonFolderProps {
|
|
|
62
63
|
keyNavigationFocusIsCreateFolderButton?: boolean;
|
|
63
64
|
icon?: ReactNode;
|
|
64
65
|
folderChild?: FolderChildFuncType;
|
|
66
|
+
maximumLevelsOfFoldersAllowed: number;
|
|
65
67
|
}
|
|
66
68
|
export {};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@ndla/ui",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "19.0.0",
|
|
4
4
|
"description": "UI component library for NDLA.",
|
|
5
5
|
"license": "GPL-3.0",
|
|
6
6
|
"main": "lib/index.js",
|
|
@@ -31,15 +31,15 @@
|
|
|
31
31
|
"types"
|
|
32
32
|
],
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@ndla/button": "^
|
|
34
|
+
"@ndla/button": "^3.0.0",
|
|
35
35
|
"@ndla/carousel": "^1.2.11",
|
|
36
36
|
"@ndla/core": "^2.3.0",
|
|
37
37
|
"@ndla/hooks": "^1.1.4",
|
|
38
38
|
"@ndla/icons": "^1.10.0",
|
|
39
39
|
"@ndla/licenses": "^5.0.2",
|
|
40
40
|
"@ndla/modal": "^1.2.12",
|
|
41
|
-
"@ndla/notion": "^3.1.
|
|
42
|
-
"@ndla/safelink": "^2.0.
|
|
41
|
+
"@ndla/notion": "^3.1.18",
|
|
42
|
+
"@ndla/safelink": "^2.0.9",
|
|
43
43
|
"@ndla/switch": "^0.1.7",
|
|
44
44
|
"@ndla/tabs": "^1.1.10",
|
|
45
45
|
"@ndla/tooltip": "^2.1.2",
|
|
@@ -81,5 +81,5 @@
|
|
|
81
81
|
"publishConfig": {
|
|
82
82
|
"access": "public"
|
|
83
83
|
},
|
|
84
|
-
"gitHead": "
|
|
84
|
+
"gitHead": "ae09299c27fc3f48f1b8f77ebe37c7aac511b2ad"
|
|
85
85
|
}
|
|
@@ -7,14 +7,14 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import styled from '@emotion/styled';
|
|
10
|
-
import React
|
|
10
|
+
import React from 'react';
|
|
11
11
|
import { FolderOutlined } from '@ndla/icons/contentType';
|
|
12
12
|
import { FileDocumentOutline } from '@ndla/icons/common';
|
|
13
13
|
import { fonts, spacing, colors, mq, breakpoints } from '@ndla/core';
|
|
14
14
|
import { css } from '@emotion/core';
|
|
15
15
|
import { useTranslation } from 'react-i18next';
|
|
16
16
|
import SafeLink from '@ndla/safelink';
|
|
17
|
-
import { MenuButton } from '@ndla/button';
|
|
17
|
+
import { MenuButton, MenuItemProps } from '@ndla/button';
|
|
18
18
|
|
|
19
19
|
interface FolderIconWrapperProps {
|
|
20
20
|
type?: LayoutType;
|
|
@@ -84,7 +84,7 @@ interface Props {
|
|
|
84
84
|
description?: string;
|
|
85
85
|
link: string;
|
|
86
86
|
type: LayoutType;
|
|
87
|
-
|
|
87
|
+
menuItems?: MenuItemProps[];
|
|
88
88
|
}
|
|
89
89
|
|
|
90
90
|
interface IconCountProps {
|
|
@@ -131,7 +131,7 @@ const IconCount = ({ type, count, layoutType }: IconCountProps) => {
|
|
|
131
131
|
|
|
132
132
|
type LayoutType = 'list' | 'block';
|
|
133
133
|
|
|
134
|
-
const Folder = ({ link, title, subFolders, subResources, type = 'list',
|
|
134
|
+
const Folder = ({ link, title, subFolders, subResources, type = 'list', menuItems }: Props) => {
|
|
135
135
|
const { t } = useTranslation();
|
|
136
136
|
return (
|
|
137
137
|
<FolderWrapper to={link}>
|
|
@@ -141,7 +141,7 @@ const Folder = ({ link, title, subFolders, subResources, type = 'list', actionMe
|
|
|
141
141
|
<FolderTitle>{title}</FolderTitle>
|
|
142
142
|
<IconCount layoutType={type} type={'folder'} count={subFolders} />
|
|
143
143
|
<IconCount layoutType={type} type={'resource'} count={subResources} />
|
|
144
|
-
<MenuButton size="small" />
|
|
144
|
+
{menuItems && menuItems.length > 0 && <MenuButton size="small" menuItems={menuItems} />}
|
|
145
145
|
</FolderWrapper>
|
|
146
146
|
);
|
|
147
147
|
};
|
|
@@ -7,11 +7,12 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import styled from '@emotion/styled';
|
|
10
|
-
import React
|
|
10
|
+
import React from 'react';
|
|
11
11
|
import SafeLink from '@ndla/safelink';
|
|
12
12
|
import { colors, fonts, spacing } from '@ndla/core';
|
|
13
|
+
import { MenuButton, MenuItemProps } from '@ndla/button';
|
|
13
14
|
import Image from '../Image';
|
|
14
|
-
import {
|
|
15
|
+
import { CompressedTagList, ResourceImageProps, ResourceTitle, Row, TopicList } from './resourceComponents';
|
|
15
16
|
|
|
16
17
|
interface BlockResourceProps {
|
|
17
18
|
link: string;
|
|
@@ -20,7 +21,7 @@ interface BlockResourceProps {
|
|
|
20
21
|
topics: string[];
|
|
21
22
|
tags?: string[];
|
|
22
23
|
description?: string;
|
|
23
|
-
|
|
24
|
+
menuItems?: MenuItemProps[];
|
|
24
25
|
}
|
|
25
26
|
|
|
26
27
|
const BlockElementWrapper = styled(SafeLink)`
|
|
@@ -77,7 +78,7 @@ const ImageWrapper = styled.div`
|
|
|
77
78
|
}
|
|
78
79
|
`;
|
|
79
80
|
|
|
80
|
-
const BlockResource = ({ link, title, tags, resourceImage, topics, description,
|
|
81
|
+
const BlockResource = ({ link, title, tags, resourceImage, topics, description, menuItems }: BlockResourceProps) => {
|
|
81
82
|
return (
|
|
82
83
|
<BlockElementWrapper to={link}>
|
|
83
84
|
<ImageWrapper>
|
|
@@ -90,8 +91,8 @@ const BlockResource = ({ link, title, tags, resourceImage, topics, description,
|
|
|
90
91
|
<TopicList topics={topics} />
|
|
91
92
|
<BlockDescription>{description}</BlockDescription>
|
|
92
93
|
<RightRow>
|
|
93
|
-
{tags &&
|
|
94
|
-
{
|
|
94
|
+
{tags && <CompressedTagList tags={tags} />}
|
|
95
|
+
{menuItems && menuItems.length > 0 && <MenuButton size="small" menuItems={menuItems} />}
|
|
95
96
|
</RightRow>
|
|
96
97
|
</BlockInfoWrapper>
|
|
97
98
|
</BlockElementWrapper>
|
|
@@ -7,11 +7,12 @@
|
|
|
7
7
|
*/
|
|
8
8
|
|
|
9
9
|
import styled from '@emotion/styled';
|
|
10
|
-
import React
|
|
10
|
+
import React from 'react';
|
|
11
11
|
import SafeLink from '@ndla/safelink';
|
|
12
12
|
import { fonts, spacing, colors, breakpoints, mq } from '@ndla/core';
|
|
13
|
+
import { MenuButton, MenuItemProps } from '@ndla/button';
|
|
13
14
|
import Image from '../Image';
|
|
14
|
-
import {
|
|
15
|
+
import { CompressedTagList, ResourceImageProps, ResourceTitle, TopicList } from './resourceComponents';
|
|
15
16
|
|
|
16
17
|
const ResourceDescription = styled.p`
|
|
17
18
|
grid-area: description;
|
|
@@ -109,10 +110,10 @@ export interface ListResourceProps {
|
|
|
109
110
|
topics: string[];
|
|
110
111
|
tags?: string[];
|
|
111
112
|
description?: string;
|
|
112
|
-
|
|
113
|
+
menuItems?: MenuItemProps[];
|
|
113
114
|
}
|
|
114
115
|
|
|
115
|
-
const ListResource = ({ link, title, tags, resourceImage, topics, description,
|
|
116
|
+
const ListResource = ({ link, title, tags, resourceImage, topics, description, menuItems }: ListResourceProps) => {
|
|
116
117
|
const showDescription = description !== undefined;
|
|
117
118
|
|
|
118
119
|
return (
|
|
@@ -126,8 +127,8 @@ const ListResource = ({ link, title, tags, resourceImage, topics, description, a
|
|
|
126
127
|
</TopicAndTitle>
|
|
127
128
|
{showDescription && <ResourceDescription>{description}</ResourceDescription>}
|
|
128
129
|
<TagsandActionMenu>
|
|
129
|
-
{tags &&
|
|
130
|
-
{
|
|
130
|
+
{tags && <CompressedTagList tags={tags} />}
|
|
131
|
+
{menuItems && menuItems.length > 0 && <MenuButton size="small" menuItems={menuItems} />}
|
|
131
132
|
</TagsandActionMenu>
|
|
132
133
|
</ResourceWrapper>
|
|
133
134
|
);
|
|
@@ -103,7 +103,11 @@ export const TagList = ({ tags }: TagListProps) => {
|
|
|
103
103
|
);
|
|
104
104
|
};
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
interface CompressedTagListProps {
|
|
107
|
+
tags: string[];
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
export const CompressedTagList = ({ tags }: CompressedTagListProps) => {
|
|
107
111
|
const visibleTags = tags.slice(0, 3);
|
|
108
112
|
const remainingTags = tags.slice(3, tags.length).map((tag) => {
|
|
109
113
|
return {
|
|
@@ -12,7 +12,6 @@ import { animations, spacing } from '@ndla/core';
|
|
|
12
12
|
import FolderItem from './FolderItem';
|
|
13
13
|
import FolderNameInput from './FolderNameInput';
|
|
14
14
|
import { FolderItemsProps } from './TreeStructure.types';
|
|
15
|
-
import { MAX_LEVEL_FOR_FOLDERS } from './TreeStructure';
|
|
16
15
|
|
|
17
16
|
const StyledUL = styled.ul<{ firstLevel?: boolean }>`
|
|
18
17
|
${animations.fadeInLeft(animations.durations.fast)};
|
|
@@ -49,6 +48,7 @@ const FolderItems = ({
|
|
|
49
48
|
setFocusedFolderId,
|
|
50
49
|
firstLevel,
|
|
51
50
|
folderChild,
|
|
51
|
+
maximumLevelsOfFoldersAllowed,
|
|
52
52
|
}: FolderItemsProps) => (
|
|
53
53
|
<StyledUL role="group" firstLevel={firstLevel}>
|
|
54
54
|
{data.map(({ name, data: dataChildren, id, url, icon }, _index) => {
|
|
@@ -69,7 +69,7 @@ const FolderItems = ({
|
|
|
69
69
|
focusedFolderId={focusedFolderId}
|
|
70
70
|
onToggleOpen={onToggleOpen}
|
|
71
71
|
onMarkFolder={onMarkFolder}
|
|
72
|
-
hideArrow={dataChildren?.length === 0 || newIdPaths.length >=
|
|
72
|
+
hideArrow={dataChildren?.length === 0 || newIdPaths.length >= maximumLevelsOfFoldersAllowed}
|
|
73
73
|
noPaddingWhenArrowIsHidden={editable && firstLevel && dataChildren?.length === 0}
|
|
74
74
|
setFocusedFolderId={setFocusedFolderId}
|
|
75
75
|
folderChild={folderChild}
|
|
@@ -101,6 +101,7 @@ const FolderItems = ({
|
|
|
101
101
|
setFocusedFolderId={setFocusedFolderId}
|
|
102
102
|
firstLevel={false}
|
|
103
103
|
folderChild={folderChild}
|
|
104
|
+
maximumLevelsOfFoldersAllowed={maximumLevelsOfFoldersAllowed}
|
|
104
105
|
/>
|
|
105
106
|
)}
|
|
106
107
|
</StyledLI>
|
|
@@ -42,6 +42,7 @@ const TreeStructure = ({
|
|
|
42
42
|
folderIdMarkedByDefault,
|
|
43
43
|
defaultOpenFolders,
|
|
44
44
|
folderChild,
|
|
45
|
+
maximumLevelsOfFoldersAllowed,
|
|
45
46
|
}: TreeStructureProps) => {
|
|
46
47
|
const { t } = useTranslation();
|
|
47
48
|
const [newFolder, setNewFolder] = useState<NewFolderProps | undefined>();
|
|
@@ -117,6 +118,9 @@ const TreeStructure = ({
|
|
|
117
118
|
setFocusedFolderId(id);
|
|
118
119
|
};
|
|
119
120
|
|
|
121
|
+
const paths = getPathOfFolder(data, markedFolderId || '');
|
|
122
|
+
const canAddFolder = editable && paths.length < (maximumLevelsOfFoldersAllowed || 1);
|
|
123
|
+
|
|
120
124
|
return (
|
|
121
125
|
<div
|
|
122
126
|
ref={treestructureRef}
|
|
@@ -132,7 +136,7 @@ const TreeStructure = ({
|
|
|
132
136
|
});
|
|
133
137
|
}
|
|
134
138
|
}}>
|
|
135
|
-
<StyledLabel htmlFor={rootLevelId}>{label}</StyledLabel>
|
|
139
|
+
{label && <StyledLabel htmlFor={rootLevelId}>{label}</StyledLabel>}
|
|
136
140
|
<TreeStructureStyledWrapper ref={wrapperRef} id={rootLevelId} aria-label="Menu tree" role="tree" framed={framed}>
|
|
137
141
|
<FolderItems
|
|
138
142
|
idPaths={[]}
|
|
@@ -152,22 +156,28 @@ const TreeStructure = ({
|
|
|
152
156
|
setFocusedFolderId={setFocusedFolderId}
|
|
153
157
|
firstLevel
|
|
154
158
|
folderChild={folderChild}
|
|
159
|
+
maximumLevelsOfFoldersAllowed={maximumLevelsOfFoldersAllowed}
|
|
155
160
|
/>
|
|
156
161
|
</TreeStructureStyledWrapper>
|
|
157
162
|
{editable && (
|
|
158
163
|
<AddFolderWrapper>
|
|
159
164
|
<Tooltip
|
|
160
|
-
tooltip={
|
|
161
|
-
|
|
162
|
-
|
|
165
|
+
tooltip={
|
|
166
|
+
canAddFolder
|
|
167
|
+
? t('myNdla.newFolderUnder', {
|
|
168
|
+
folderName: getFolderName(data, markedFolderId),
|
|
169
|
+
})
|
|
170
|
+
: t('myNdla.maxFoldersAlreadyAdded')
|
|
171
|
+
}>
|
|
163
172
|
<AddButton
|
|
173
|
+
disabled={!canAddFolder}
|
|
164
174
|
aria-label={t('myNdla.newFolder')}
|
|
165
175
|
onClick={() => {
|
|
166
|
-
const paths = getPathOfFolder(data, markedFolderId || '');
|
|
167
176
|
const idPaths = getIdPathsOfFolder(data, markedFolderId || '');
|
|
168
177
|
setNewFolder({ idPaths, parentId: paths[paths.length - 1] });
|
|
169
|
-
}}
|
|
170
|
-
|
|
178
|
+
}}>
|
|
179
|
+
{t('myNdla.newFolder')}
|
|
180
|
+
</AddButton>
|
|
171
181
|
</Tooltip>
|
|
172
182
|
</AddFolderWrapper>
|
|
173
183
|
)}
|
|
@@ -175,4 +185,8 @@ const TreeStructure = ({
|
|
|
175
185
|
);
|
|
176
186
|
};
|
|
177
187
|
|
|
188
|
+
TreeStructure.defaultProps = {
|
|
189
|
+
maximumLevelsOfFoldersAllowed: MAX_LEVEL_FOR_FOLDERS,
|
|
190
|
+
};
|
|
191
|
+
|
|
178
192
|
export default TreeStructure;
|
|
@@ -34,11 +34,12 @@ interface CommonFolderProps {
|
|
|
34
34
|
|
|
35
35
|
export interface TreeStructureProps extends CommonFolderProps {
|
|
36
36
|
framed?: boolean;
|
|
37
|
-
label
|
|
37
|
+
label?: string;
|
|
38
38
|
folderIdMarkedByDefault?: string;
|
|
39
39
|
onNewFolder: (props: { value: string; parentId?: string; idPaths: number[] }) => Promise<string>;
|
|
40
40
|
defaultOpenFolders?: string[];
|
|
41
41
|
folderChild?: FolderChildFuncType;
|
|
42
|
+
maximumLevelsOfFoldersAllowed: number;
|
|
42
43
|
}
|
|
43
44
|
|
|
44
45
|
export type onCreateNewFolderProp = ({
|
|
@@ -70,4 +71,5 @@ export interface FolderItemsProps extends CommonFolderProps {
|
|
|
70
71
|
keyNavigationFocusIsCreateFolderButton?: boolean;
|
|
71
72
|
icon?: ReactNode;
|
|
72
73
|
folderChild?: FolderChildFuncType;
|
|
74
|
+
maximumLevelsOfFoldersAllowed: number;
|
|
73
75
|
}
|