diff --git a/CHANGELOG.md b/CHANGELOG.md
index 8b73184..41330dc 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -8,8 +8,16 @@ Check [Keep a Changelog](http://keepachangelog.com/) for recommendations on how
### TODO
+- refactor caching
+- refactor ui
- drag and drop
+## [1.4.2]
+
+### Added
+
+- lazy load big workspaces lists
+
## [1.4.1]
### Changed
diff --git a/web/components/commons/list-selector/ListSelector.svelte b/web/components/commons/list-selector/ListSelector.svelte
index 3cb47a5..955fa6a 100644
--- a/web/components/commons/list-selector/ListSelector.svelte
+++ b/web/components/commons/list-selector/ListSelector.svelte
@@ -24,34 +24,32 @@
let showSelector = false;
let selected = -1;
- $: filteredSpaces = $spacesTree.spaces
- .map((s) => {
- if (!searchText) {
- return s;
- }
- const ret = { ...s };
- ret.folders =
- ret.folders
- ?.map((f) => {
- const fret = { ...f };
- fret.lists =
- fret.lists?.filter((l) =>
- l.name.toLowerCase().includes(searchText.toLowerCase())
- ) ?? [];
- return fret;
- })
- ?.filter(
- (f) =>
- f.lists?.length ||
- f.name.toLowerCase().includes(searchText.toLowerCase())
- ) ?? [];
- ret.lists =
- ret.lists?.filter((l) =>
- l.name.toLowerCase().includes(searchText.toLowerCase())
+ $: filteredSpaces = $spacesTree.spaces.map((s) => {
+ if (!searchText) {
+ return s;
+ }
+ const ret = { ...s };
+ ret.folders =
+ ret.folders
+ ?.map((f) => {
+ const fret = { ...f };
+ fret.lists =
+ fret.lists?.filter((l) =>
+ l.name.toLowerCase().includes(searchText.toLowerCase())
+ ) ?? [];
+ return fret;
+ })
+ ?.filter(
+ (f) =>
+ f.lists?.length ||
+ f.name.toLowerCase().includes(searchText.toLowerCase())
) ?? [];
- return ret;
- })
- .filter((s) => s.lists?.length || s.folders?.length);
+ ret.lists =
+ ret.lists?.filter((l) =>
+ l.name.toLowerCase().includes(searchText.toLowerCase())
+ ) ?? [];
+ return ret;
+ });
function handleSearching() {
if (searchText) {
@@ -187,7 +185,17 @@
return undefined;
}
- function toggleSpace(spaceId: string) {
+ async function toggleSpace(spaceId: string) {
+ const space = $spacesTree.spaces.find((s) => s.id === spaceId);
+ if (!space.folders?.length && !space.lists?.length) {
+ const [{ data: folders }, { data: lists }] = await Promise.all([
+ clickupService.getFolders(space.id),
+ clickupService.getFolderlessLists(space.id),
+ ]);
+ space.folders = folders ?? [];
+ space.lists = lists ?? [];
+ clickupService.setCache('spaces', $spacesTree);
+ }
showSpaces = { ...showSpaces, [spaceId]: !showSpaces[spaceId] };
searchText = '';
}
@@ -255,10 +263,10 @@
? `${selectedView.list?.name}: ${selectedView.name}`
: 'Select view...'
: selectedLists.length
- ? `(${selectedLists.length} list${
- selectedLists.length > 1 ? 's' : ''
- } selected)`
- : 'Select lists...'}
+ ? `(${selectedLists.length} list${
+ selectedLists.length > 1 ? 's' : ''
+ } selected)`
+ : 'Select lists...'}
/>
{#if showSelector}
[] = [];
+
spaces.forEach((space) => {
- promises.push(this.getFolders(space.id));
- promises.push(this.getFolderlessLists(space.id));
+ if (spaces.length <= 10) {
+ promises.push(this.getFolders(space.id));
+ promises.push(this.getFolderlessLists(space.id));
+ } else {
+ space.folders = [];
+ space.lists = [];
+ }
spacesTree.spaces.push(space);
});
const results = await Promise.all(promises);
diff --git a/yarn.lock b/yarn.lock
index 344e301..0ac534d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -2314,10 +2314,10 @@ nanoid@3.3.3:
resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.3.tgz#fd8e8b7aa761fe807dba2d1b98fb7241bb724a25"
integrity sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==
-nanoid@^3.3.4:
- version "3.3.4"
- resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.4.tgz#730b67e3cd09e2deacf03c027c81c9d9dbc5e8ab"
- integrity sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==
+nanoid@^3.3.7:
+ version "3.3.7"
+ resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8"
+ integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==
napi-build-utils@^1.0.1:
version "1.0.2"
@@ -2575,13 +2575,13 @@ postcss-value-parser@^4.0.0, postcss-value-parser@^4.2.0:
integrity sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==
postcss@^8.4.18, postcss@^8.4.21:
- version "8.4.21"
- resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.21.tgz#c639b719a57efc3187b13a1d765675485f4134f4"
- integrity sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==
+ version "8.4.38"
+ resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.38.tgz#b387d533baf2054288e337066d81c6bee9db9e0e"
+ integrity "sha1-s4fVM7ryBUKI4zcGbYHGvunbng4= sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A=="
dependencies:
- nanoid "^3.3.4"
+ nanoid "^3.3.7"
picocolors "^1.0.0"
- source-map-js "^1.0.2"
+ source-map-js "^1.2.0"
prebuild-install@^7.0.1:
version "7.1.1"
@@ -2971,10 +2971,10 @@ sorcery@^0.10.0:
sander "^0.5.0"
sourcemap-codec "^1.3.0"
-source-map-js@^1.0.2:
- version "1.0.2"
- resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c"
- integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==
+source-map-js@^1.2.0:
+ version "1.2.0"
+ resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.0.tgz#16b809c162517b5b8c3e7dcd315a2a5c2612b2af"
+ integrity "sha1-FrgJwWJRe1uMPn3NMVoqXCYSsq8= sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg=="
source-map-support@~0.5.20:
version "0.5.21"