added system tag for buckets
This commit is contained in:
@@ -17,7 +17,11 @@ export const TagPicker: Component<TagPickerProps> = (props) => {
|
|||||||
const [valueScore, setValueScore] = createSignal(5);
|
const [valueScore, setValueScore] = createSignal(5);
|
||||||
|
|
||||||
// Filter tags for the "Name" part
|
// Filter tags for the "Name" part
|
||||||
const allTagNames = () => store.tagDefinitions.map(d => d.name).sort();
|
const allTagNames = () => {
|
||||||
|
const definedTags = store.tagDefinitions.map(d => d.name);
|
||||||
|
const bucketTags = store.buckets.map(b => b.name);
|
||||||
|
return [...new Set([...definedTags, ...bucketTags])].sort();
|
||||||
|
};
|
||||||
|
|
||||||
// When a tag name is selected, update the value score to match its current definition
|
// When a tag name is selected, update the value score to match its current definition
|
||||||
createEffect(() => {
|
createEffect(() => {
|
||||||
@@ -35,7 +39,9 @@ export const TagPicker: Component<TagPickerProps> = (props) => {
|
|||||||
if (!name) return;
|
if (!name) return;
|
||||||
|
|
||||||
// update global definition
|
// update global definition
|
||||||
upsertTagDefinition(name, valueScore(), undefined, resolvedTheme());
|
const bucket = store.buckets.find(b => b.name === name);
|
||||||
|
const color = bucket ? bucket.color : undefined;
|
||||||
|
upsertTagDefinition(name, valueScore(), color, resolvedTheme());
|
||||||
|
|
||||||
// Toggle in current task selection if not already there
|
// Toggle in current task selection if not already there
|
||||||
const currentSelected = props.selectedTags;
|
const currentSelected = props.selectedTags;
|
||||||
|
|||||||
@@ -500,7 +500,7 @@ export const SettingsView: Component = () => {
|
|||||||
<Show when={isTagsOpen()}>
|
<Show when={isTagsOpen()}>
|
||||||
<div class="space-y-2 pt-2 animate-in fade-in slide-in-from-top-2 duration-300">
|
<div class="space-y-2 pt-2 animate-in fade-in slide-in-from-top-2 duration-300">
|
||||||
<div class="space-y-2">
|
<div class="space-y-2">
|
||||||
<For each={store.tagDefinitions.filter(t => !t.isUser).sort((a, b) => a.name.localeCompare(b.name))} fallback={
|
<For each={store.tagDefinitions.filter(t => !t.isUser && !store.buckets.some(b => b.name === t.name)).sort((a, b) => a.name.localeCompare(b.name))} fallback={
|
||||||
<div class="text-center py-8 text-muted-foreground text-sm italic border border-dashed border-border rounded-xl">
|
<div class="text-center py-8 text-muted-foreground text-sm italic border border-dashed border-border rounded-xl">
|
||||||
No custom tags found.
|
No custom tags found.
|
||||||
</div>
|
</div>
|
||||||
@@ -580,16 +580,16 @@ export const SettingsView: Component = () => {
|
|||||||
</For>
|
</For>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* User Tags Expansion */}
|
{/* User/System Tags Expansion */}
|
||||||
<details class="group/details">
|
<details class="group/details">
|
||||||
<summary class="flex items-center gap-2 text-xs font-bold uppercase tracking-wider text-muted-foreground cursor-pointer hover:text-foreground transition-colors py-2 select-none pt-4">
|
<summary class="flex items-center gap-2 text-xs font-bold uppercase tracking-wider text-muted-foreground cursor-pointer hover:text-foreground transition-colors py-2 select-none pt-4">
|
||||||
<div class="bg-muted/50 p-1 rounded-md group-open/details:rotate-90 transition-transform">
|
<div class="bg-muted/50 p-1 rounded-md group-open/details:rotate-90 transition-transform">
|
||||||
<ChevronRight size={12} />
|
<ChevronRight size={12} />
|
||||||
</div>
|
</div>
|
||||||
User Tags (System)
|
System Tags (Users & Buckets)
|
||||||
</summary>
|
</summary>
|
||||||
<div class="pt-2 pl-4 space-y-2 animate-in fade-in slide-in-from-top-1 duration-200">
|
<div class="pt-2 pl-4 space-y-2 animate-in fade-in slide-in-from-top-1 duration-200">
|
||||||
<For each={store.tagDefinitions.filter(t => t.isUser).sort((a, b) => a.name.localeCompare(b.name))}>
|
<For each={store.tagDefinitions.filter(t => t.isUser || store.buckets.some(b => b.name === t.name)).sort((a, b) => a.name.localeCompare(b.name))}>
|
||||||
{(tag) => (
|
{(tag) => (
|
||||||
<div class="flex flex-col sm:flex-row sm:items-center justify-between p-2 rounded-lg bg-muted/10 border border-border/20 gap-3 sm:gap-4 group opacity-80">
|
<div class="flex flex-col sm:flex-row sm:items-center justify-between p-2 rounded-lg bg-muted/10 border border-border/20 gap-3 sm:gap-4 group opacity-80">
|
||||||
<div class="flex items-center gap-3 min-w-0 flex-1">
|
<div class="flex items-center gap-3 min-w-0 flex-1">
|
||||||
|
|||||||
Reference in New Issue
Block a user