Compare commits

...
Sign in to create a new pull request.

15 commits
main ... page

Author SHA1 Message Date
thororen1234
01922fab44
Merge branch 'dev' into page
All checks were successful
Build Branches / Build Equicord (push) Has been skipped
2026-05-07 11:54:45 -04:00
thororen1234
4c607b8e2f
Merge branch 'dev' into page 2026-05-07 11:32:05 -04:00
thororen1234
dfe871fc0f
Merge branch 'dev' into page 2026-04-10 07:46:33 -04:00
thororen1234
6d330d843b
Merge branch 'dev' into page 2026-04-09 18:16:29 -04:00
thororen1234
8195356eff
Merge branch 'dev' into page 2026-03-06 21:15:35 -05:00
thororen1234
b6eedba8ca
Merge branch 'dev' into page 2026-03-02 17:28:30 -05:00
thororen1234
62052bbf77
Merge branch 'dev' into page 2026-03-02 17:25:43 -05:00
thororen1234
cf11b32a72
Merge branch 'dev' into page 2026-02-26 11:24:28 -05:00
thororen1234
d85ab7f332
Merge branch 'dev' into page 2026-02-15 09:34:57 -05:00
thororen1234
f9235ca19e
Merge branch 'dev' into page 2026-02-15 09:29:57 -05:00
thororen1234
db77edf1ad
Merge branch 'dev' into page 2026-02-11 18:20:34 -05:00
thororen1234
648f56fcd0
Merge branch 'dev' into page 2025-12-31 21:38:16 -05:00
thororen1234
f7a7852078
Merge branch 'dev' into page 2025-12-16 23:59:19 -05:00
thororen1234
09cc428770
Merge branch 'dev' into page 2025-12-16 23:38:58 -05:00
thororen1234
c80f3bcdc0
page 2025-08-12 09:29:45 -04:00
2 changed files with 39 additions and 17 deletions

View file

@ -197,6 +197,8 @@ export default function PluginSettings() {
const hasUserPlugins = useMemo(() => !IS_STANDALONE && Object.values(PluginMeta).some(m => m.userPlugin), []); const hasUserPlugins = useMemo(() => !IS_STANDALONE && Object.values(PluginMeta).some(m => m.userPlugin), []);
const [searchValue, setSearchValue] = useState({ value: "", tags: [] as PluginTag[], status: SearchStatus.ALL }); const [searchValue, setSearchValue] = useState({ value: "", tags: [] as PluginTag[], status: SearchStatus.ALL });
const [currentPage, setCurrentPage] = React.useState(1);
const pageSize = 36;
const search = searchValue.value.toLowerCase(); const search = searchValue.value.toLowerCase();
const onSearch = (query: string) => setSearchValue(prev => ({ ...prev, value: query })); const onSearch = (query: string) => setSearchValue(prev => ({ ...prev, value: query }));
@ -358,22 +360,13 @@ export default function PluginSettings() {
const enabledUserPlugins = enabledPlugins.filter(p => PluginMeta[p].userPlugin).length; const enabledUserPlugins = enabledPlugins.filter(p => PluginMeta[p].userPlugin).length;
return { totalStockPlugins, totalUserPlugins, enabledStockPlugins, enabledUserPlugins, enabledPlugins }; return { totalStockPlugins, totalUserPlugins, enabledStockPlugins, enabledUserPlugins, enabledPlugins };
}, [settings.plugins]); }, [settings.plugins]);
const pluginsToLoad = Math.min(36, plugins.length);
const [visibleCount, setVisibleCount] = React.useState(pluginsToLoad);
const loadMore = React.useCallback(() => {
setVisibleCount(v => Math.min(v + pluginsToLoad, plugins.length));
}, [plugins.length]);
const dLoadMore = useMemo(() => debounce(loadMore, 100), [loadMore]); const visiblePlugins = plugins.slice((currentPage - 1) * pageSize, currentPage * pageSize);
const totalPages = Math.ceil(plugins.length / pageSize);
const [sentinelRef, isSentinelVisible] = useIntersection(); function goToPage(page: number) {
React.useEffect(() => { setCurrentPage(Math.max(1, Math.min(page, totalPages)));
if (isSentinelVisible && visibleCount < plugins.length) {
dLoadMore();
} }
}, [isSentinelVisible, visibleCount, plugins.length, dLoadMore]);
const visiblePlugins = plugins.slice(0, visibleCount);
return ( return (
<SettingsTab> <SettingsTab>
@ -449,8 +442,27 @@ export default function PluginSettings() {
: <Paragraph>No plugins meet the search criteria.</Paragraph> : <Paragraph>No plugins meet the search criteria.</Paragraph>
} }
</div> </div>
{visibleCount < plugins.length && (
<div ref={sentinelRef} style={{ height: 32 }} /> {totalPages > 1 && (
<div className={cl("page-buttons")}>
<Button
size="small"
disabled={currentPage === 1}
onClick={() => goToPage(currentPage - 1)}
>
Prev
</Button>
<div className={cl("page-text")}>
<Paragraph>{`Page ${currentPage} of ${totalPages}`}</Paragraph>
</div>
<Button
size="small"
disabled={currentPage === totalPages}
onClick={() => goToPage(currentPage + 1)}
>
Next
</Button>
</div>
)} )}
</> </>
) )

View file

@ -266,11 +266,21 @@
} }
.vc-plugins-page-buttons { .vc-plugins-page-buttons {
margin-top: 12px; margin-top: 20px;
display: flex; display: flex;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
gap: 8px; gap: 8px;
position: relative;
}
.vc-plugins-page-text {
width: 120px;
font-size: 14px;
font-weight: 500;
display: flex;
align-items: center;
justify-content: center;
} }
.vc-plugins-source { .vc-plugins-source {