* feat: Start work on package api * feat: Browser Context Controller * feat: Add packages to cluster metadata feat: Change structure of Package * 🐛 fix: format * 🔨 feat: Add more functions wrapping around Modrinth * 🔨 feat: Start working on browser frontend * feat: BrowserPackage work + markdown support * 🐛 fix: fmt Signed-off-by: Pauline <git@ethanlibs.co> * 🚧 wip: h Signed-off-by: Pauline <git@ethanlibs.co> * feat: Download button for packages for suitable clusters + tweaks * 🚧 wip: markdown and stuff Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: some patches Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: remove react bloat Signed-off-by: Pauline <git@ethanlibs.co> * 🔨 chore(pkg/infer): try to reduce reused code Signed-off-by: Pauline <git@ethanlibs.co> * 🔨 chore: bump deps Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: markdown innerhtml Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: h Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: tweak Signed-off-by: Pauline <git@ethanlibs.co> * 🚧 wip: idk Signed-off-by: Pauline <git@ethanlibs.co> * fix: Gamemode compile error chore: Add missing and remove unused libraries feat: usePreventLeave hook feat: ClusterOverview edit mode continues with navigation (assuming there was a navigation attempt) after pressing Yes or No for save * feat: Add reload clusters button on home page * feat: More information provided to BrowserPackage * fix: Minor fixes (Navbar isActive, Markdown click prevention, Markdown list styling) * 🐛 fix: h Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: highlighting Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: forge modern Signed-off-by: Pauline <git@ethanlibs.co> * 🔨 chore: bump deps Signed-off-by: Pauline <git@ethanlibs.co> * fix: Markdown-it issue + Added promptOpener hook for Markdown links * feat: Made BrowserPackage sidebar sticky * refactor: Package system (not yet in a working state) * 🚧 wip: bump deps temp Signed-off-by: Pauline <git@ethanlibs.co> * feat: Added a package manager * ✨ feature: start prisma work, but it doesnt break anything so we can keep it until its done. also fix some stuff Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: pushing Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: linting Signed-off-by: Pauline <git@ethanlibs.co> * ✨ feature: start ingress integration Signed-off-by: Pauline <git@ethanlibs.co> * feat: Package Manager should work now 👍 * fix: Package manager tracing spam * feat: Added tauri commands for cluster packages format: Auto formatted frontend + backend * 🐛 fix: tmp Signed-off-by: Pauline <git@ethanlibs.co> * 🔨 chore: format Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: specta extension Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: github actions Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: alias Signed-off-by: Pauline <git@ethanlibs.co> * chore: Some tweaks and fixes * chore: Rebase + gitignore bindings.ts * chore: Remove bindings.ts * 🐛 fix: migrate Signed-off-by: Pauline <git@ethanlibs.co> * 🚧 wip: not sure Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: finalize prisma init schema Signed-off-by: Pauline <git@ethanlibs.co> * 🔨 chore: format Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: bump deps Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: system deps Signed-off-by: Pauline <git@ethanlibs.co> * fix: solid-router navigation issue * feat: Added new BrowserMain page * feat: Tweaks + new package list view * 🐛 fix: bump + format (todo: tauri2, etc) Signed-off-by: Pauline <git@ethanlibs.co> * 🐛 fix: devx (fixes #126) Signed-off-by: Pauline <git@ethanlibs.co> * 🔨 chore: migrate to consola Signed-off-by: Pauline <git@ethanlibs.co> --------- Signed-off-by: Pauline <git@ethanlibs.co> Co-authored-by: LynithDev <61880709+LynithDev@users.noreply.github.com>
73 lines
2.1 KiB
TypeScript
73 lines
2.1 KiB
TypeScript
import { OverlayScrollbarsComponent } from 'overlayscrollbars-solid';
|
|
import { type Context, type JSX, type ParentProps, type Signal, createContext, createEffect, createSignal, splitProps, useContext } from 'solid-js';
|
|
import styles from './SelectList.module.scss';
|
|
|
|
type SelectListContextHelpers = Signal<number | undefined>;
|
|
const SelectListContext = createContext<SelectListContextHelpers>() as Context<SelectListContextHelpers>;
|
|
|
|
function SelectListContextProvider(props: ParentProps & {
|
|
onChanged?: ((index: number | undefined) => any) | undefined;
|
|
}) {
|
|
const [selected, setSelected] = createSignal<number | undefined>();
|
|
|
|
createEffect(() => {
|
|
props.onChanged?.(selected());
|
|
});
|
|
|
|
return (
|
|
<SelectListContext.Provider value={[selected, setSelected]}>
|
|
{props.children}
|
|
</SelectListContext.Provider>
|
|
);
|
|
}
|
|
|
|
function useSelectListContext() {
|
|
return useContext(SelectListContext);
|
|
}
|
|
|
|
export type SelectListProps = Omit<JSX.HTMLAttributes<HTMLDivElement>, 'onChange'> & {
|
|
onChange?: (index: number | undefined) => any;
|
|
};
|
|
|
|
function SelectList(props: SelectListProps) {
|
|
const [split, rest] = splitProps(props, ['class', 'onChange']);
|
|
return (
|
|
<SelectListContextProvider onChanged={props.onChange}>
|
|
<div {...rest} class={`${styles.select_list} ${split.class || ''}`}>
|
|
<OverlayScrollbarsComponent class="max-h-full">
|
|
<div>
|
|
{props.children}
|
|
</div>
|
|
</OverlayScrollbarsComponent>
|
|
</div>
|
|
</SelectListContextProvider>
|
|
);
|
|
}
|
|
|
|
export type SelectListRowProps = JSX.HTMLAttributes<HTMLDivElement> & {
|
|
index?: number;
|
|
};
|
|
|
|
SelectList.Row = (props: SelectListRowProps) => {
|
|
const [selected, setSelected] = useSelectListContext();
|
|
const [split, rest] = splitProps(props, ['index', 'class', 'onClick']);
|
|
|
|
return (
|
|
<div
|
|
{...rest}
|
|
tabIndex={0}
|
|
onClick={(e) => {
|
|
if (props.index !== undefined)
|
|
setSelected(props.index);
|
|
|
|
if (typeof split.onClick === 'function')
|
|
split.onClick(e);
|
|
}}
|
|
class={`${styles.row} ${props.index !== undefined && selected() === props.index ? styles.selected : ''} ${split.class || ''}`}
|
|
>
|
|
{props.children}
|
|
</div>
|
|
);
|
|
};
|
|
|
|
export default SelectList;
|