From 3eb2e0bdb9e31125c36f04ce25e7c0bf7ea2ef60 Mon Sep 17 00:00:00 2001 From: Paul Miller Date: Wed, 26 Apr 2023 10:55:47 -0500 Subject: [PATCH] tag editor without tag buttons --- src/components/TagEditor.tsx | 58 ++++++++++++------------------------ src/styles/solid-select.css | 4 +-- 2 files changed, 21 insertions(+), 41 deletions(-) diff --git a/src/components/TagEditor.tsx b/src/components/TagEditor.tsx index 284ebba..bc49359 100644 --- a/src/components/TagEditor.tsx +++ b/src/components/TagEditor.tsx @@ -1,83 +1,63 @@ import { Select, createOptions } from "@thisbeyond/solid-select"; -import { For, createSignal } from "solid-js"; import "~/styles/solid-select.css" import { SmallHeader } from "./layout"; - // take two arrays, subtract the second from the first, then return the first function subtract(a: T[], b: T[]) { const set = new Set(b); return a.filter(x => !set.has(x)); }; -// combine two arrays and keep only the items that are unique -function combineUnique(a: T[], b: T[]) { - const set = new Set([...a, ...b]); - return [...set]; -}; - // simple math.random based id generator const createUniqueId = () => Math.random().toString(36).substr(2, 9); -type Contact = { +export type TagItem = { id: string; name: string; + kind: "text" | "contact"; } -const fakeContacts: Contact[] = [ - { id: createUniqueId(), name: "👤 Alice" }, - { id: createUniqueId(), name: "👤 Tony" }, - { id: createUniqueId(), name: "👤 @benthecarman" }, - { id: createUniqueId(), name: "👀 Uknown" } -] - const createValue = (name: string) => { - return { id: createUniqueId(), name }; + return { id: createUniqueId(), name, kind: "text" }; }; -export function TagEditor() { - const candidates = [...fakeContacts]; +export function TagEditor(props: { title: string, values: TagItem[], setValues: (values: TagItem[]) => void, selectedValues: TagItem[], setSelectedValues: (values: TagItem[]) => void }) { + const onChange = (selected: TagItem[]) => { + props.setSelectedValues(selected); - const [values, setValues] = createSignal(candidates); - const [selectedValues, setSelectedValues] = createSignal([]); - - const onChange = (selected: Contact[]) => { - setSelectedValues(selected); + console.log(selected) const lastValue = selected[selected.length - 1]; - if (lastValue && !values().includes(lastValue)) { - setValues([...values(), lastValue]); + if (lastValue && !props.values.includes(lastValue)) { + props.setValues([...props.values, lastValue]); } }; - const props = createOptions(values, { + const selectProps = createOptions(props.values, { key: "name", - disable: (value) => selectedValues().includes(value), + disable: (value) => props.selectedValues.includes(value), filterable: true, // Default createable: createValue, }); return (
- Tag the origin + {props.title}