mirror of
https://github.com/kmc7468/arkvault.git
synced 2026-02-04 16:16:55 +00:00
사소한 리팩토링 2
This commit is contained in:
44
src/lib/components/molecules/Categories.svelte
Normal file
44
src/lib/components/molecules/Categories.svelte
Normal file
@@ -0,0 +1,44 @@
|
||||
<script module lang="ts">
|
||||
import type { DataKey } from "$lib/modules/filesystem";
|
||||
|
||||
export interface SelectedCategory {
|
||||
id: number;
|
||||
dataKey?: DataKey;
|
||||
name: string;
|
||||
}
|
||||
</script>
|
||||
|
||||
<script lang="ts">
|
||||
import type { Component } from "svelte";
|
||||
import type { SvelteHTMLElements } from "svelte/elements";
|
||||
import { ActionEntryButton } from "$lib/components/atoms";
|
||||
import { CategoryLabel } from "$lib/components/molecules";
|
||||
import type { SubCategoryInfo } from "$lib/modules/filesystem";
|
||||
import { sortEntries } from "$lib/utils";
|
||||
|
||||
interface Props {
|
||||
categories: SubCategoryInfo[];
|
||||
categoryMenuIcon?: Component<SvelteHTMLElements["svg"]>;
|
||||
onCategoryClick: (category: SelectedCategory) => void;
|
||||
onCategoryMenuClick?: (category: SelectedCategory) => void;
|
||||
}
|
||||
|
||||
let { categories, categoryMenuIcon, onCategoryClick, onCategoryMenuClick }: Props = $props();
|
||||
|
||||
let categoriesWithName = $derived(sortEntries($state.snapshot(categories)));
|
||||
</script>
|
||||
|
||||
{#if categoriesWithName.length > 0}
|
||||
<div class="space-y-1">
|
||||
{#each categoriesWithName as category (category.id)}
|
||||
<ActionEntryButton
|
||||
class="h-12"
|
||||
onclick={() => onCategoryClick(category)}
|
||||
actionButtonIcon={categoryMenuIcon}
|
||||
onActionButtonClick={() => onCategoryMenuClick?.(category)}
|
||||
>
|
||||
<CategoryLabel name={category.name} />
|
||||
</ActionEntryButton>
|
||||
{/each}
|
||||
</div>
|
||||
{/if}
|
||||
@@ -1,33 +0,0 @@
|
||||
<script lang="ts">
|
||||
import type { Component } from "svelte";
|
||||
import type { SvelteHTMLElements } from "svelte/elements";
|
||||
import type { SubCategoryInfo } from "$lib/modules/filesystem";
|
||||
import { SortBy, sortEntries } from "$lib/utils";
|
||||
import Category from "./Category.svelte";
|
||||
import type { SelectedCategory } from "./service";
|
||||
|
||||
interface Props {
|
||||
categories: SubCategoryInfo[];
|
||||
categoryMenuIcon?: Component<SvelteHTMLElements["svg"]>;
|
||||
onCategoryClick: (category: SelectedCategory) => void;
|
||||
onCategoryMenuClick?: (category: SelectedCategory) => void;
|
||||
sortBy?: SortBy;
|
||||
}
|
||||
|
||||
let { categories, categoryMenuIcon, onCategoryClick, onCategoryMenuClick }: Props = $props();
|
||||
|
||||
let categoriesWithName = $derived(sortEntries(structuredClone($state.snapshot(categories))));
|
||||
</script>
|
||||
|
||||
{#if categoriesWithName.length > 0}
|
||||
<div class="space-y-1">
|
||||
{#each categoriesWithName as category}
|
||||
<Category
|
||||
info={category}
|
||||
menuIcon={categoryMenuIcon}
|
||||
onclick={onCategoryClick}
|
||||
onMenuClick={onCategoryMenuClick}
|
||||
/>
|
||||
{/each}
|
||||
</div>
|
||||
{/if}
|
||||
@@ -1,26 +0,0 @@
|
||||
<script lang="ts">
|
||||
import type { Component } from "svelte";
|
||||
import type { SvelteHTMLElements } from "svelte/elements";
|
||||
import { ActionEntryButton } from "$lib/components/atoms";
|
||||
import { CategoryLabel } from "$lib/components/molecules";
|
||||
import type { SubCategoryInfo } from "$lib/modules/filesystem";
|
||||
import type { SelectedCategory } from "./service";
|
||||
|
||||
interface Props {
|
||||
info: SubCategoryInfo;
|
||||
menuIcon?: Component<SvelteHTMLElements["svg"]>;
|
||||
onclick: (category: SelectedCategory) => void;
|
||||
onMenuClick?: (category: SelectedCategory) => void;
|
||||
}
|
||||
|
||||
let { info, menuIcon, onclick, onMenuClick }: Props = $props();
|
||||
</script>
|
||||
|
||||
<ActionEntryButton
|
||||
class="h-12"
|
||||
onclick={() => onclick(info)}
|
||||
actionButtonIcon={menuIcon}
|
||||
onActionButtonClick={() => onMenuClick?.(info)}
|
||||
>
|
||||
<CategoryLabel name={info.name} />
|
||||
</ActionEntryButton>
|
||||
@@ -1,2 +0,0 @@
|
||||
export { default } from "./Categories.svelte";
|
||||
export * from "./service";
|
||||
@@ -1,7 +0,0 @@
|
||||
import type { DataKey } from "$lib/modules/filesystem";
|
||||
|
||||
export interface SelectedCategory {
|
||||
id: number;
|
||||
dataKey?: DataKey;
|
||||
name: string;
|
||||
}
|
||||
@@ -1,7 +1,7 @@
|
||||
export * from "./ActionModal.svelte";
|
||||
export { default as ActionModal } from "./ActionModal.svelte";
|
||||
export * from "./Categories";
|
||||
export { default as Categories } from "./Categories";
|
||||
export * from "./Categories.svelte";
|
||||
export { default as Categories } from "./Categories.svelte";
|
||||
export { default as IconEntryButton } from "./IconEntryButton.svelte";
|
||||
export * from "./labels";
|
||||
export { default as SubCategories } from "./SubCategories.svelte";
|
||||
|
||||
Reference in New Issue
Block a user